程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#如何解決對ListView控件更新以及更新時界面閃爍問題,

C#如何解決對ListView控件更新以及更新時界面閃爍問題,

編輯:C#入門知識

C#如何解決對ListView控件更新以及更新時界面閃爍問題,


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

 

  1. 上一頁:
  2. 下一頁: