2010-11-04 51 views
3

我真的很新的Windows窗體編程,不太清楚什麼是正確的編程方式。如何在我的表單啓動後執行代碼?

這是我的困惑。

我有一個單一的形式:

public partial class ReconcilerConsoleWindow : Form 
    { 
     public ReconcilerConsoleWindow() 
     { 
      InitializeComponent(); 
      SetLogText("Started"); 

     } 

     public void SetLogText(String text) 
     { 
      string logInfo = DateTime.Now.TimeOfDay.ToString() + ": " + text + Environment.NewLine; 
      tbx_Log.AppendText(logInfo); 
     } 


    } 

在我的Program.cs類我有以下代碼:

static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      ReconcilerConsoleWindow window = new ReconcilerConsoleWindow(); 
      Application.Run(window); 

      if (CallSomeMethod() == true) 
      { 
       window.SetLogText("True"); 
      }      

     } 


    } 

現在,一旦窗口已被Application.Run顯示命令,該程序暫停。如何在窗口打開的情況下進一步處理?

以上只是一個例子。我的目的是讀取一個XMl文件並顯示一個datagridview。隨後,我觀察XMl文件的更改,並且每次進行更改時,我都要刷新datagridview。但是,一旦控制檯彈出,我該如何繼續執行我的程序,並對錶單上顯示的信息進行更改?

回答

8

Application.Run之後發生的處理通常在表單的Load事件處理程序中觸發。通過雙擊窗體上的任何空白區域,您可以在Visual Studio中輕鬆創建Load方法。

這會看起來東西這樣。

private void ReconcilerConsoleWindow_Load(object sender, EventArgs e) 
    { 
     if (CallSomeMethod()) 
     { 
      this.SetLogText("True"); 
     } 
    } 

的原因,這是(在其他幾個答案說明)是主thread(即所謂Application.Run(window)一)現在採取了對形式的操作Message Pump。您可以使用表單或表單的事件,通過消息傳遞繼續在該線程上運行。或者你可以開始一個新的線程。這可能在main方法做,你叫Application.Run(window)之前,但大多數人會做這或形式構造,以保證的形式設立,等等。一旦Application.Run回報,所有形式現在已關閉。

+0

嗯,這是不是一個真正的問題的答案?!他也可以在構造函數或Main()中啓動線程。充其量,這是答案的一部分。 – Falcon 2010-11-04 19:30:56

+0

@Falcon,這是最常見的*初學者*答案。老實說,如果我開始線程,我通常從我的'Form_Load'做它們。 – 2010-11-04 19:32:15

+0

嗯,你打敗了我! – dotalchemy 2010-11-04 19:33:21

2

Program.cs並不意味着有商業規則,它只應該調用你的窗體並顯示它。所有的數據網格加載/刷新/編輯應該在你的表單上完成。您應該使用Forms類上定義的事件,如:OnLoad,OnUnload,OnClose等等。

3

Application.Run啓動Windows事件處理循環。該循環不會完成直到您的表單關閉,此時您對它做的任何事情都無關緊要。

如果您想對錶單執行某些操作,請在表單的Load事件處理程序中執行此操作。

0

一旦Application.Run(窗口)是所謂的,你會想在應用程序窗口中處理後續的事情。

在窗體的代碼視圖,找到以下(或添加它)

private void ReconcilerConsoleWindow_Load(object sender, EventArgs e) 
{ 
//this is where you do things :) 
      if (CallSomeMethod() == true) 
      { 
       window.SetLogText("True"); 
      } 
} 
相關問題