第一個問題:如何更新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#,還不怎麼了解。