我的问题很简单。我有一个应用程序,我在其中创建并调用子线程。我的子线程启动一个记事本,用户输入一些值然后关闭它。然后,我的应用程序从记事本中获取信息进行额外的处理。 问题是我的主线程不会等待子线程结束 (记事本被关闭),以执行额外的处理。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当然。 –
你如何启动记事本?你能告诉我们一些代码吗? –