2011-05-11 42 views
0

当打开第二个表格 的方法/函数在另一个线程上时,是否可以打开我的第二个表单?用另一个线程上的方法/函数打开另一个表单?

我已阅读有关这个​​.. 其他线程,但它似乎我无法弄清楚如何使用调用

这里就是我打开第二个形式 当IM调用这个..没有正好..(因为它的第二个线程)

TimerMode f2 = new TimerMode(); 
f2.ShowDialog(); 

请帮助我。我新手多-threading ..

回答

0

它应该做点什么。这是因为ShowDialog将运行自己的消息循环。 TimerMode窗体至少应该可见并且正常工作。但是,你是对的,这真的不是最好的做法,尤其是如果这个表单将与已经在主UI线程上运行的其他表单交互。

这里是你如何做到这一点。

anotherForm.Invoke(
    (MethodInvoker)(() => 
    { 
    new TimerMode().ShowDialog(); 
    })); 

注意anotherForm是这已经是托管在主UI线程上的其他形式的一个参考。

+0

嗨,Brian,感谢您给出的示例代码。它的作品像一个魅力,但我仍然有一个问题,我认为这仍然与此线程相关..如果我使用.ShowDialog()它以某种方式停留在那里..下面的代码不执行..如果我使用.Show()现在读取以下代码集合,但TimerMode For看起来像是处于Not-Responding状态(如在应用程序挂起时在Windows XP中)。这是我发现的。再次感谢您的回答。 – Katherina 2011-05-11 17:06:07

+0

也只是为了添加,如果TimerMode现在显示..我无法可见= false的第一种形式。它没有任何反应。 =( – Katherina 2011-05-11 17:11:02

+0

)你将不得不发布更多的代码,没有看到更大的图片,我只能推测 – 2011-05-11 18:07:04

2

你需要在主窗口线程 上执行尝试以下操作:

this.Invoke((MethodInvoker)delegate{ 
    TimerMode f2 = new TimerMode(); 
    f2.ShowDialog(); 
} 

这将正确的线程上创建它。

+0

嗨谢谢你的答案。生病尝试你的提示,并给你一个反馈。再次感谢 – Katherina 2011-05-11 04:57:39

+0

你好。我试图使用你给我的示例代码。但没有运气,(关键字'这'是无效的静态属性,静态方法,或静态字段初始值设定项(CS0026))被突出显示为错误..也将这帮助我如何做像vb6(form2 .show?)再次感谢 – Katherina 2011-05-11 05:23:52