我正在使用C#编写一个应用程序,使用Process
类和wget.exe
下载图像。
我想处理Process.Exited
事件,而不调用WaitForExit
,因为调用WaitForExit
会挂起我的UI。为了解决这个问题,我尝试过许多技术,比如在另一个线程上同时调用Process.Start()
和Process.WaitForExit()
,使用BackgroundWorker
等等。然而,我的UI在某个级别上仍然会挂起。所以现在我只想处理Process.Exited
事件,而不使用WaitForExit
。
我的代码是:
bool processComplete = false;
Process process = new Process();
private void Start()
{
process.StartInfo.FileName = "path of wget";
process.StartInfo.Arguments = "arguments for downloading images";
process.EnableRaisingEvents = true;
process.Exited += new EventHandler(Process_Complete);
process.StartInfo.WindowStyle = ProcessWindowStyle.Hide;
process.Start();
}
private void Process_Complete(object sender, EventArgs e)
{
processComplete = true;
}
开始进程后,
Process.Exited
事件会触发两次。首先,在进程仍在进行中时,如果下载变慢(如图片超过1000个等),则会在中间触发一次process.exited事件
,然后当所有图片下载完成后会再次触发。我期望
Process.Exited
事件只触发一次。为什么会触发两次呢?