简史。我有一个小报告工具,我正在创建它使用一个backgroundWorker来做报告。运行良好,GUI更新得很好,并报告我想要它的内容。
然而,如果我得到了很多返回的结果,然后尝试更新我的ListView控件,那么在添加所有的ListViewItems时图形用户界面就挂起了。在此期间,我想向用户提供一些反馈,让他们知道应用程序仍在运行,但似乎无法弄清楚。
我试图从BackgroundWorker中更新ListView,当然得到了跨线程错误。
我尝试从BackgroundWorker.DoWork中创建一个新的ListView,直到我尝试将ListView添加到BackgroundWorker.RunWorkerCompleted中的图形用户界面,并收到跨线程错误。
我试图从BackgroundWorker.RunWorkerCompleted更新ListView,这就是图形用户界面挂起的地方(实际上变成了白色),我甚至创建了一个进度窗口,它也做同样的事情。一旦完成了ListViewItems的添加,应用程序就会恢复正常并正常工作。
有谁有什么想法吗?
谢谢帕特里克
发布于 2010-01-01 02:50:51
您应该在RunWorkerCompleted的UI线程上将项添加到ListView。
您应该在添加项之前调用ListView的BeginUpdate方法,然后再调用EndUpdate。这应该会让它变得更快。
为了更快,您应该创建一个ListViewItems数组,然后使用整个数组调用AddRange。
如果这样做,就不需要调用BeginUpdate或EndUpdate,因为AddRange会为您调用它们。
发布于 2010-01-01 02:55:28
不是在RunWorkerCompleted中一次添加所有项,而是在ProgressChanged事件处理程序中以10或20为一批添加它们。
https://stackoverflow.com/questions/1986610
复制相似问题