我的问题很简单。我有一个应用程序,我在其中创建并调用子线程。我的子线程启动一个记事本,用户输入一些值然后关闭它。然后,我的应用程序从记事本中获取信息以进行其他处理。 问题是我的主线程不等待子线程结束 (记事本要关闭),执行额外的处理。
我本可以使用表单来收集这些输入,但我希望有一个简约的程序。今天,输入来自记事本。 Tommorow,可能来自MS Office或OpenOffice。 有人可以提供一些指导吗? 问候。
答案 0 :(得分:3)
我认为这里有一个更简单的方法。 Process类有一个退出事件,您可以注册:
var process = new Process();
process.StartInfo = new ProcessStartInfo("notepad.exe");
process.EnableRaisingEvents = true;
process.Exited += (o, e) =>
{
Console.WriteLine("Closed");
};
process.Start();
答案 1 :(得分:0)
您需要的命令是Thread.Join
答案 2 :(得分: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
。