2012-12-08 40 views
1

在我的Program.cs文件,代碼如下:只要表單處於活動狀態,如何運行後臺線程?

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    frmWizard frm = new frmWizard(); 
    Application.Run(frm); 

    Thread th = new Thread(frm.ThreadSetCom); 
    th.Start(); 
} 

ThreadSetCom的是,在一個無限循環檢查的東西運行的方法。我注意到ThreadSetCom只會在WinForm出現之前和關閉表單之後執行。它不會在窗體可見時執行。任何人都可以請我清楚嗎?

回答

2

Application.Run等待,直到參數中傳遞的表單被關閉。 frmWizard的load事件中可能需要createstartthread

private void frmWizard_Load(object sender, System.EventArgs e) 
{ 
    Thread th = new Thread(ThreadSetCom); 
    th.Start(); 
} 
+0

還要注意,線程,當你關閉窗體將仍然活着。 – abatishchev

+0

非常感謝!有效!無論如何,你能指點我一個鏈接還是一本書,我可以更多地瞭解多線程?我找不到一個很容易理解的東西。 – user1885498

+0

我發現這篇文章關於瞭解多線程的書籍,http://stackoverflow.com/questions/1526520/good-book-about-threading-in-net – Adil

1

Application.Run會阻塞,直到您關閉窗體,它解釋了您看到此行爲的原因。 Adil的答案會起作用,但我相信你不應該以這種方式耦合你的代碼。如果您的Main方法獨立於Form Load事件啓動第二個線程會更好。

所以,你只需要重新安排你的代碼是這樣的:

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    frmWizard frm = new frmWizard(); 

    Thread th = new Thread(frm.ThreadSetCom); 
    th.Start(); 

    Application.Run(frm); 
} 
+0

哦很好..那我也是我的意圖。我不覺得在另一個線程中有一個線程。聽起來有點複雜。謝謝 – user1885498

+0

您還應該設置th.IsBackground = true,以便在表單關閉後終止進程。否則後臺線程可以在窗體關閉後繼續運行。請參閱此處以獲取更多信息:https://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground%28v=vs.110% 29.aspx – BlokeTech

相關問題