在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
第一个问题:如何更新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); } } }
注意:该添加的引用都要添加进去哦,因为修改了控件名,因此会出现一些错误哦。 |
请发表评论