2011-03-18 244 views
1

我在c#程序中創建了2窗體窗體應用程序。我這樣做:c#窗體窗體應用程序

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

第二種形式是不加載。爲什麼?我該如何解決這個問題?我想在同一時間激活這兩種形式。每個表單應用程序都會採用不同的方法。我想以某種方式爲這些形式中的每一種創建一個並行流程。

解決方案和問題: 我創建了2個線程 - 爲2個窗體。這表格稱爲父母表格。問題是父窗體有一個向量,我想從窗體中不斷添加元素。我注意到每次線程重新激活時,矢量都會重新初始化。如何改變這件事?

回答

3

因爲Application.Run被阻塞。它正在當前線程上運行應用程序。你必須在其中的每一個Application.Run命令中啓動2個獨立的線程。

最好的方法是在一個單獨的線程中打開其中的一個。

+0

我已經創建了2個線程 - 爲2個formsl。這表格稱爲父母表格。事情是paretn形式有一個向量,我想在其中連續添加表單中的元素。我注意到每次線程重新激活時,矢量都會重新初始化。如何嘮叨這件事? – elisa 2011-03-18 12:04:59

+0

對不起,我沒有太多的線程間通信經驗。 – 2011-03-18 12:37:46

0

我真的無法理解你正在嘗試什麼來完成,但接近第一形態和第二個會顯示:-)

你沒有看到第二個,因爲run方法它沒有返回控制,直到你在你的情況下關閉工作對象這是Forms1

4

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

1
Application.Run(new Form1()); 

這將調用Form1,它將一直等到這個表單關閉。之後,第二個Run方法將被調用。

Application.Run是同步的方法,

1

adrianbanks' answer here

推薦的方法是使用Application.Run開始的WinForms應用程序,但我懷疑這是一個多規則的公約。使用Application.Run的最大原因是如果你想打開多個非模態表單。你可以這樣做:

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

您忘記提到,在這種情況下,應用程序進程不會終止,如果全部表格將被關閉,但其真正有用的方式 – 2011-03-18 09:01:19

相關問題