2011-09-23 185 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