【问题标题】:Creating a WinForm on the main thread using a backgroundworker使用 backgroundworker 在主线程上创建 WinForm
【发布时间】:2011-06-11 18:12:11
【问题描述】:

我有一个后台工作线程,我正试图让它创建一个表单实例,但我不希望后台工作线程拥有该对象,但我会就像拥有它的主线程一样。我从哪里开始?

【问题讨论】:

  • 这看起来像是一个非常奇怪(=错误)的设计。 Bgw 为什么要创建表单?
  • 当我的应用程序加载时,我会显示某种形式,创建一个互斥体并在后台工作人员上启动一个 TCP 侦听器。如果第二个实例加载,因为它无法获得相同的互斥锁,它会通过 TCP 侦听器告诉第一个实例应用程序尝试再次加载。然后我希望后台工作人员(不再锁定)告诉主线程显示某种形式。

标签: c# multithreading forms backgroundworker


【解决方案1】:

您可以使用Invoke 和BeginInvoke 函数来获取要在GUI 线程上执行的代码。你可以让你的另一个线程引发一个事件,然后在你的主窗体中处理它,然后你的主窗体可以调用该回调到它自己的线程(使用 InvokeRequired 然后调用)来启动新窗体。

如果您使用的是后台工作人员,您可以使用 OnProgressChanged 方法向您的应用程序发出信号以执行某项操作。

另外,看看这个excellent book

【讨论】:

  • 谢谢,我会看看 Invoke 的进展情况并告诉你。
猜你喜欢
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 2020-04-07
相关资源
最近更新 更多