c#窗体窗体应用程序

问题描述:

我在c#程序中创建了2窗体窗体应用程序。我这样做:c#窗体窗体应用程序

Application.Run(new Form1()); 
Application.Run(new Form2()); 

第二种形式是不加载。为什么?我该如何解决这个问题?我想在同一时间激活这两种形式。每个表单应用程序都会采用不同的方法。我想以某种方式为这些形式中的每一种创建一个并行流程。

解决方案和问题: 我创建了2个线程 - 为2个窗体。这表格称为父母表格。问题是父窗体有一个向量,我想从窗体中不断添加元素。我注意到每次线程重新激活时,矢量都会重新初始化。如何改变这件事?

因为Application.Run被阻塞。它正在当前线程上运行应用程序。你必须在其中的每一个Application.Run命令中启动2个独立的线程。

最好的方法是在一个单独的线程中打开其中的一个。

+0

我已经创建了2个线程 - 为2个formsl。这表格称为父母表格。事情是paretn形式有一个向量,我想在其中连续添加表单中的元素。我注意到每次线程重新激活时,矢量都会重新初始化。如何唠叨这件事? – elisa 2011-03-18 12:04:59

+0

对不起,我没有太多的线程间通信经验。 – 2011-03-18 12:37:46

我真的无法理解你正在尝试什么来完成,但接近第一形态和第二个会显示:-)

你没有看到第二个,因为run方法它没有返回控制,直到你在你的情况下关闭工作对象这是Forms1

Application.Run用于启动您的应用程序并指示应用程序启动时应加载哪个窗口(即哪个窗口应该是主窗口)。要显示第二种形式,您需要创建并手动显示,而不是使用Application.Run

var form = new Form2(); 
form.Show(); 

此代码可以放在Form1的构造函数中或响应某个事件。它可能不会以相同的方法创建,因为您调用Application.Run,因为此方法不会继续运行,直到您关闭Form1窗口。可能是Forms1的构造函数是做这件事的最佳场所。

+0

打败我吧,另请参阅:http://msdn.microsoft.com/en-us/library/ms157902(v=VS.90).aspx – HadleyHope 2011-03-18 08:53:49

Application.Run(new Form1()); 

这将调用Form1,它将一直等到这个表单关闭。之后,第二个Run方法将被调用。

Application.Run是同步的方法,

adrianbanks' answer here

推荐的方法是使用Application.Run开始的WinForms应用程序,但我怀疑这是一个多规则的公约。使用Application.Run的最大原因是如果你想打开多个非模态表单。你可以这样做:

new Form().Show(); 
new Form().Show(); 
Application.Run(); 
+0

您忘记提到,在这种情况下,应用程序进程不会终止,如果全部表格将被关闭,但其真正有用的方式 – 2011-03-18 09:01:19