.net中的多个GUI一个foreach线程?

时间:2012-07-29 22:29:51

标签: c# .net winforms multithreading user-interface

我正在使用C#/ .net中的多线程应用程序 我希望每个线程都创建自己的表单,以便它可以访问它并在其表单上显示其信息而没有任何问题 有没有办法做到这一点?
我已经尝试过Application.Run(new MyForm()),但问题是这个函数阻止了执行,我的线程无法完成它的工作。

3 个答案:

答案 0 :(得分:2)

这是设计的。线程一次只能做一件事,所以如果你的代码运行,该线程上的UI将被阻止,如果你想运行一个UI,你将不得不使用一些消息传递构造(如计时器)来获取你的工作已经完成。

正确的方法是拥有一个UI线程并让其他线程异步发布进度消息以便在UI上显示(例如,在表单上使用BeginInvoke,可以安全地从其他线程调用)

答案 1 :(得分:1)

您可以使用表单的Show方法来展示它,即使您希望以Dialog形式显示表单,也可以使用ShowDialog方法,Dialog将位于其他形式。

答案 2 :(得分:0)

您需要使用Show方法从其线程打开表单,并且您无法在不同线程的表单之间进行链接,例如来自不同线程的MDI父级和子级。 顺便说一下,你可以在主GUI线程中打开所有表单,并使用invoke来显示来自其他线程的数据而没有任何问题,我认为这种方法更好。看这里:http://msdn.microsoft.com/en-us/library/ms951089.aspx