gpt4 book ai didi

c# - 异步进程启动并等待它完成

转载 作者:IT王子 更新时间:2023-10-29 04:02:01 26 4
gpt4 key购买 nike

我是 .NET 中线程模型的新手。你会用什么来:

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

启动进程和等待应该在与主线程不同的线程上完成,因为这个操作不应该影响应用程序。

例子:

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

最佳答案

“并且等待必须是异步的”——我不是想开玩笑,但这不是自相矛盾吗?但是,由于您正在启动一个 ProcessExited 事件可能会有所帮助:

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
}
});

关于c# - 异步进程启动并等待它完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com