我的問題很簡單。我有一個應用程序,我在其中創建並調用子線程。我的子線程啓動一個記事本,用戶輸入一些值然後關閉它。然後,我的應用程序從記事本中獲取信息進行額外的處理。 問題是我的主線程不會等待子線程結束 (記事本被關閉),以執行額外的處理。C#線程:暫停主線程,直到子線程關閉。
我可以使用表單來收集這些輸入,但我希望有一個簡約的程序。今天,輸入來自記事本。 Tommorow,它可能來自MS Office或OpenOffice。 有人可以提供一些指導嗎? 此致敬禮。
我的問題很簡單。我有一個應用程序,我在其中創建並調用子線程。我的子線程啓動一個記事本,用戶輸入一些值然後關閉它。然後,我的應用程序從記事本中獲取信息進行額外的處理。 問題是我的主線程不會等待子線程結束 (記事本被關閉),以執行額外的處理。C#線程:暫停主線程,直到子線程關閉。
我可以使用表單來收集這些輸入,但我希望有一個簡約的程序。今天,輸入來自記事本。 Tommorow,它可能來自MS Office或OpenOffice。 有人可以提供一些指導嗎? 此致敬禮。
我認爲這裏有一個更簡單的方法。 Process類有一個Exited事件,你可以註冊:
var process = new Process();
process.StartInfo = new ProcessStartInfo("notepad.exe");
process.EnableRaisingEvents = true;
process.Exited += (o, e) =>
{
Console.WriteLine("Closed");
};
process.Start();
在爲輔助線程的代碼:
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
。
那麼,對我來說,提供一個簡單的文本輸入編輯控件的窗體,聽起來比啓動記事本更「簡約」。然後正確地等待它完成,抓住它的內容(你使用臨時文件或強制用戶複製到剪貼板?),並處理各種失敗情況。 YMMV當然。 –
你如何啓動記事本?你能告訴我們一些代碼嗎? –