【发布时间】:2013-10-17 03:27:42
【问题描述】:
我有一个承载 WCF 服务的 Winforms 应用程序。
在我的Connect 按钮点击事件中,连接通过BackgroundWorker 打开,以便我的 UI 响应,而此连接仍在进行中(1 - 2 秒),在BackgroundWorker_RunWorkerCompleted 事件之后转到我的其他类做我的事。
最近我在调试时添加了几个Thread.Sleep,并注意到它不会冻结我的用户界面,所以在我搜索后我发现这可能是因为BackgroundWorker 线程(我说的对吗?)
在我的应用程序中,我有一个表单类和另一个包含多个事件的类,表单类订阅这些事件并以这种方式更新我的 UI:
this.Invoke((MethodInvoker)delegate
{
// Update UI
});
所以我的问题是:以这种方式使用另一个线程并使用this.Invoke 是否可以?
或者我需要用其他方式吗?
【问题讨论】:
-
即使您的方法是正确的,如果您想知道一种不使用 Invoke 来处理 UI 更新的不同方法,我建议您阅读有关 SynchronizationContext 的内容。 codeproject.com/Articles/31971/…
标签: c# multithreading winforms wcf