第一個問題:如何更新ListView控件內容
很多時候運行窗體程序時,由於程序中使用了多線程加之操作不當,所以在對控件操作時會出現下面這樣的異常:
這是因為我們在窗體中添加的控件都有屬於自己的線程,所以不能從其它線程來訪問它。
那要如何解決?
使用委托:MethodInvoker,我用這個挺方便的。下面舉一個用例:
1 //調用InitListView(),便可以對ListView控件進行自由更新啦
2 private void InitListView()
3 {
4 MethodInvoker In = new MethodInvoker(InitListViewed);
5 this.BeginInvoke(In);
6 }
7 private void InitListViewed()
8 {
10 //在這裡面就可以進行ListView控件的構建以及數據更新等
11 listView1.Columns.Clear();
12 }
第二個問題:如何解決ListView控件更新時閃爍問題
我在更新控件時,使用的是定時更新,而每次更新控件的內容都會一閃一閃的,用戶體驗感一點也不好。
那有沒有辦法使它不閃,我解決的辦法是使用雙緩沖。
下面舉一個例子,簡單說一下步驟及辦法。
1、第一步:我們創建一個類,類名為ListViewNF,是繼承窗體的ListView控件
class ListViewNF : System.Windows.Forms.ListView
{
public ListViewNF()
{
// 開啟雙緩沖
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(Message m)
{
//Filter out the WM_ERASEBKGND message
if (m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}
注意:該添加的引用都要添加進去哦
第二步:修改窗體設計器生成的代碼
將private System.Windows.Forms.ListViewNF listView;一行代碼注釋掉或者刪掉
添加ListViewNF listView1;
ListViewNF listView1;
//private System.Windows.Forms.ListViewNF listView;
第三步:由於你將 listView 改為了 listView1,因此會出現大量錯誤,所以需要將用到 listView 的地方改為 listView1,
其中有一個地方需要將原來的代碼改成下圖格式(黃色框框圈出來的地方)

通過以上方式,更新內容時就會很舒服了。
不知道我說得清不清楚,有錯或者有更好的方法大家可以與我交流交流,我也是剛使用C#,還不怎麼了解。