2011-09-23 180 views
0

我的問題很簡單。我有一個應用程序,我在其中創建並調用子線程。我的子線程啓動一個記事本,用戶輸入一些值然後關閉它。然後,我的應用程序從記事本中獲取信息進行額外的處理。 問題是我的主線程不會等待子線程結束 (記事本被關閉),以執行額外的處理。C#線程:暫停主線程,直到子線程關閉。

我可以使用表單來收集這些輸入,但我希望有一個簡約的程序。今天,輸入來自記事本。 Tommorow,它可能來自MS Office或OpenOffice。 有人可以提供一些指導嗎? 此致敬禮。

+2

那麼,對我來說,提供一個簡單的文本輸入編輯控件的窗體,聽起來比啓動記事本更「簡約」。然後正確地等待它完成,抓住它的內容(你使用臨時文件或強制用戶複製到剪貼板?),並處理各種失敗情況。 YMMV當然。 –

+0

你如何啓動記事本?你能告訴我們一些代碼嗎? –

回答

0

你需要的命令是Thread.Join

+1

kalyan的編輯點到底是什麼?低掛水果獲得一點代表... – alex

+0

@alex - 我很困惑 - 你不通過編輯其他人的問題得到回報嗎? –

+0

如果你在2K以下,你會這樣做。每個用戶使用超過2k的批准進行的每次編輯得到2分。一旦你達到2000分,你不會得到任何積分。這個新規則的缺點是許多低級代表用戶改變了一件微不足道的事情並且慢慢地積累了積分。 – alex

3

我認爲這裏有一個更簡單的方法。 Process類有一個Exited事件,你可以註冊:

 var process = new Process(); 
     process.StartInfo = new ProcessStartInfo("notepad.exe"); 
     process.EnableRaisingEvents = true; 
     process.Exited += (o, e) => 
           { 
            Console.WriteLine("Closed"); 
           }; 
     process.Start(); 
0

在爲輔助線程的代碼:

using (Process p = Process.Start(...your parameters here...)) { 
    // waits for the user to close the document 
    p.WaitForExit(); 
    // TODO: postprocessing of the edited document 
} 

在你的主要方法:

static void Main(string[] args) { 
    ... 
    Thread helperThread = // TODO: create thread 
    helperThread.Start(); 
    // TODO: do other things 
    ... 
    // Wait for the helper thread to exit 
    helperThread.Join(); 
} 

你有等待啓動的進程退出(Process.WaitForExit等待線程退出以及(Thread.Join)。

也就是說,你不必使用單獨的線程,你可以在主線程中啓動進程。無論如何,文檔的編輯都是平行的。當你需要輸出時只需使用WaitForExit