如何从WCF服务更新ListView?

时间:2011-06-23 13:00:13

标签: c# .net winforms wcf listview

我在Windows窗体应用程序(.NET C#4)中托管了WCF服务。这运行在它自己的线程上。当在WCF服务上调用方法时,我想更新List(即List),然后Form中的ListView向显示添加一行。

实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

在Windows下,控件必须在主应用程序或GUI线程中更新,而不是您怀疑的工作线程。主要原因是控件使用 Windows消息泵,必须由主线程处理。

从非工作线程中的线程编组数据的非UI线程更新控件到UI线程;在.net这是一件容易的事。您创建一个委托回调方法,该方法通过 BeginInvoke ()或调用()调用,这些方法是异步同步分别。

myListBox.BeginInvoke(new MyDelegate(DelegateMethod), "hi there");

public void DelegateMethod(ListView myControl, string message)
{
   myControl.Items.Add (message);
}

根据您的性能需求,您可能希望使用 BeginInvoke ()在后台完成更新,而不是调用()来阻止工作线程。但要考虑的一件事是,如果你每个时间间隔执行太多 BeginInvoke (),它会阻碍你的应用程序的性能,因为Windows消息泵会被打乱,更不用说某些消息可能会丢失。但实际上,你需要做很多事情来实现这一点,并且它与任何其他性能要求密切相关。

希望一切顺利

this article进一步描述了这一点。