C#线程:暂停主线程直到子线程关闭。

时间:2011-09-23 04:42:36

标签: c# multithreading

我的问题很简单。我有一个应用程序,我在其中创建并调用子线程。我的子线程启动一个记事本,用户输入一些值然后关闭它。然后,我的应用程序从记事本中获取信息以进行其他处理。 问题是我的主线程不等待子线程结束 (记事本要关闭),执行额外的处理。

我本可以使用表单来收集这些输入,但我希望有一个简约的程序。今天,输入来自记事本。 Tommorow,可能来自MS Office或OpenOffice。 有人可以提供一些指导吗? 问候。

3 个答案:

答案 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