2010-12-22 53 views
2

當我運行以下代碼時,這兩個表單「掛起」。任何想法爲什麼?在控制檯應用程序中實例化WinForm

static void Main() 
    { 

     Form f1 = new Form(); 
     f1.Show(); 

     Form f2 = new Form(); 
     f2.Show(); 


     Console.ReadLine(); 
    } 
+1

提示:查看Windows應用程序中的主要方法,看看它有哪些額外的東西來處理表單。你也需要這個。 :) – 2010-12-22 13:48:58

回答

2

基本上,您需要致電Application.Run以處理窗口的消息。

如果其中一種形式是您的「主窗口」,即您希望窗口關閉時應用程序退出,則應使用Application.Run(form)

如果你想要幾個窗口,但都不是特別重要,只需使用Application.Run(),然後通過調用Application.Exit()來決定何時退出應用程序。

另一種替代方法是在第二種形式上調用Form.ShowDialogShowDialog有自己的消息泵,所以當第二個窗口打開時,消息將被處理兩個窗口。但在這種情況下,當您調用ShowDialog的窗口關閉時,其他窗口將被凍結。

6

因爲您的線程中沒有消息循環。

要進行形式工作,您必須打開它通過Application.Run(form)(MSDN Link)

+0

感謝您的答覆。這是讓表單運行的唯一方法? – gsharp 2010-12-22 13:57:23

+0

AFAIK是的,這是唯一的方法... – digEmAll 2010-12-22 13:59:59

0

你對這些形式的任何交互或者是他們的空測試的呢?

我原以爲代碼會在與控制檯窗口相同的線程上啓動窗體 - 並且Show()阻塞,直到窗體顯示出來。也可能是控制檯窗口阻塞,給你一個死鎖。如果可以的話,我希望一旦你關閉了f1,控制檯就會繼續執行。

編輯:其他答案表明我完全錯了。忽略我所說的。無論如何,我認爲它實際上是ShowDialog()在一個對話窗口上,而不是Show()

相關問題