我正在编写一个应用程序,其中我有一个进程在BackgroundWorker
. 我想支持从用户界面取消,但我没有看到一个简单的方法来做到这一点。
这Process
实际上是一个运行时间相当长的命令行 exe。输出通过事件异步重定向Progress.OutputDataReceived
,并用于向 GUI 报告进度。
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
using (var process = new Process())
{
//...
process.Start()
//...
process.WaitForExit();
}
}
private void CancelWorker()
{
worker.CancelAsync();
// where to actually listen for the cancellation???
}
似乎没有办法让进程“侦听”除 之外的主线程的任何输入StandardInput
,但除非应用程序本身响应特定输入以中止,否则这将不起作用。
有没有办法根据来自主线程的取消请求来取消进程?
出于我在进程中运行的 EXE 的目的,我可以只调用Process.Close()
退出而没有任何副作用,但该Process
对象仅对该worker_DoWork()
方法已知,因此我需要跟踪Process
实例以用于取消目的。 ..这就是为什么我希望可能有更好的方法。
(如果重要的话,我的目标是 .NET 3.5 以解决兼容性问题。)