一尘不染

异步进程开始并等待它完成

c#

我是.net中线程模型的新手。您将用来:

  1. 启动一个处理文件的进程(process.StartInfo.FileName = fileName;)
  2. 等待用户关闭进程或在一段时间后放弃线程
  3. 如果用户关闭了进程,则删除文件

启动进程和等待的操作应在与主线程不同的线程上进行,因为此操作不应影响应用程序。

例:

我的应用程序生成一个html报告。用户可以右键单击某个地方并说“查看报告”-现在,我在一个临时文件中检索报告内容,并启动处理html文件(即默认浏览器)的过程。问题是我无法清理,即删除临时文件。


阅读 235

收藏
2020-05-19

共1个答案

一尘不染

“并且等待必须是异步的”-我不是想逗他,但这不是矛盾吗?但是,由于您正在启动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
    }
});
2020-05-19