2014-01-12 132 views
2

我試圖打開一個新的窗體,但它似乎每次都立即關閉。 它工作,如果我使用ShowDialog()而不是Show(),但那不是我的意圖。打開新窗口窗體,立即關閉

class Forms 
{ 
    Main mainForm; 
    Thread mainThread; 

    public Forms() 
    { 

    } 
    private void ThreadProc() 
    { 
     try 
     { 
      mainForm = new Main(); 
      mainForm.Show(); 

     } 
     catch { } 
    } 
    public void startMain() 
    { 
     mainThread = new Thread(new ThreadStart(ThreadProc)); 
     mainThread.SetApartmentState(ApartmentState.STA); 
     mainThread.Start(); 
    } 
} 

回答

5

問題是您的mainThread不運行任何消息循環(負責響應所有與GUI相關的消息,例如調整大小,點擊按鈕等),因此在調用mainForm.Show()之後線程完成。
事實上的WinForms應用程序通常這樣開始:

Application.Run(new MainForm()); 

這裏,你可以在MSDN documentation看到,Application.Run開始在當前線程標準的消息循環和顯示形式。

如果你使用ShowDialog()它可以工作,因爲模態窗體在內部運行它們自己的消息循環。

我不知道你在做什麼,但ShowDialog可能是最簡單的解決方案;如果你不喜歡它,只需將mainForm.Show替換成Application.Run(mainForm)即可。

3

您需要使用Application.Run來啓動應用程序的消息循環,否則程序會像一個控制檯應用程序,並關閉一旦其代碼已經執行完畢。

using System.Windows.Forms;添加到課程的頂部。

然後把mainForm.Show();改爲Application.Run(mainForm);在ThreadProc裏面。

1

您應該use

Application.Run(new MainForm()); 

開始運行在當前 線程標準應用程序消息循環,並使指定窗體可見。