【问题标题】:Using another thread in my application在我的应用程序中使用另一个线程
【发布时间】: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


【解决方案1】:

是的,这没关系,它是在异步出现之前发明的后台工作线程。

我推荐使用async

【讨论】:

  • 我个人不推荐异步,不过没关系。我有一个模式,它的行为比我可能应该提取到库中的异步稍好。
  • 是的,如果你想把它扔到 codeproject 或其他东西上,那会很好看。一直在寻找更多的东西。
猜你喜欢
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2018-11-18
  • 2012-08-30
  • 2013-05-13
  • 2012-03-12
相关资源
最近更新 更多