2011-06-11 50 views
0

我有一个后台工作人员,我试图让它创建一个窗体的实例,但我不希望后台工作线程自己该对象,但希望主线程拥有它。我从哪里开始呢?使用backgroundworker在主线程创建WinForm

+0

这看起来像一个非常奇怪的(=错)设计。为什么一个Bgw创建一个表单? – 2011-06-11 10:06:26

+0

当我的应用程序加载时,我显示一个特定的表单,创建一个互斥体并启动一个后台worker上的TCP侦听器。如果第二个实例由于无法获得相同的互斥量而被加载,它会通过TCP监听器告诉第一个实例该应用程序试图再次加载。然后,我想让后台工作者(不再锁定)告诉主线程显示某种形式。 – R4D4 2011-06-11 10:25:54

回答

1

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

如果您使用的是后台工作人员,您可以将OnProgressChanged方法用于通知您的应用程序执行某些操作。

而且,看看这个excellent book

+0

谢谢,我会看到Invoke如何去让你知道。 – R4D4 2011-06-11 10:30:29

相关问题