我是.net中线程模型的新手。您将用来:
启动进程和等待的操作应在与主线程不同的线程上进行,因为此操作不应影响应用程序。
例:
我的应用程序生成一个html报告。用户可以右键单击某个地方并说“查看报告”-现在,我在一个临时文件中检索报告内容,并启动处理html文件(即默认浏览器)的过程。问题是我无法清理,即删除临时文件。
“并且等待必须是异步的”-我不是想逗他,但这不是矛盾吗?但是,由于您正在启动Process,因此该Exited事件可能会有所帮助:
Process
Exited
ProcessStartInfo startInfo = null; Process process = Process.Start(startInfo); process.EnableRaisingEvents = true; process.Exited += delegate {/* clean up*/};
如果您想实际等待(超时等),则:
if(process.WaitForExit(timeout)) { // user exited } else { // timeout (perhaps process.Kill();) }
为了等待异步,也许只是使用其他线程?
ThreadPool.QueueUserWorkItem(delegate { Process process = Process.Start(startInfo); if(process.WaitForExit(timeout)) { // user exited } else { // timeout } });