当打开第二个表格 的方法/函数在另一个线程上时,是否可以打开我的第二个表单?用另一个线程上的方法/函数打开另一个表单?
我已阅读有关这个.. 其他线程,但它似乎我无法弄清楚如何使用调用
这里就是我打开第二个形式 当IM调用这个..没有正好..(因为它的第二个线程)
TimerMode f2 = new TimerMode();
f2.ShowDialog();
请帮助我。我新手多-threading ..
当打开第二个表格 的方法/函数在另一个线程上时,是否可以打开我的第二个表单?用另一个线程上的方法/函数打开另一个表单?
我已阅读有关这个.. 其他线程,但它似乎我无法弄清楚如何使用调用
这里就是我打开第二个形式 当IM调用这个..没有正好..(因为它的第二个线程)
TimerMode f2 = new TimerMode();
f2.ShowDialog();
请帮助我。我新手多-threading ..
它应该做点什么。这是因为ShowDialog
将运行自己的消息循环。 TimerMode
窗体至少应该可见并且正常工作。但是,你是对的,这真的不是最好的做法,尤其是如果这个表单将与已经在主UI线程上运行的其他表单交互。
这里是你如何做到这一点。
anotherForm.Invoke(
(MethodInvoker)(() =>
{
new TimerMode().ShowDialog();
}));
注意anotherForm
是这已经是托管在主UI线程上的其他形式的一个参考。
你需要在主窗口线程 上执行尝试以下操作:
this.Invoke((MethodInvoker)delegate{
TimerMode f2 = new TimerMode();
f2.ShowDialog();
}
这将正确的线程上创建它。
嗨,Brian,感谢您给出的示例代码。它的作品像一个魅力,但我仍然有一个问题,我认为这仍然与此线程相关..如果我使用.ShowDialog()它以某种方式停留在那里..下面的代码不执行..如果我使用.Show()现在读取以下代码集合,但TimerMode For看起来像是处于Not-Responding状态(如在应用程序挂起时在Windows XP中)。这是我发现的。再次感谢您的回答。 – Katherina 2011-05-11 17:06:07
也只是为了添加,如果TimerMode现在显示..我无法可见= false的第一种形式。它没有任何反应。 =( – Katherina 2011-05-11 17:11:02
)你将不得不发布更多的代码,没有看到更大的图片,我只能推测 – 2011-05-11 18:07:04