【发布时间】:2014-11-04 06:26:47
【问题描述】:
我正在用 C# 编写一个应用程序来使用 Process 类和 wget.exe 下载图像。
我想在不调用 WaitForExit 的情况下处理 Process.Exited 事件,因为调用 WaitForExit 会挂起我的 UI。为了解决这个问题,我尝试了许多技术,例如在另一个线程上同时调用Process.Start() 和Process.WaitForExit(),使用BackgroundWorker 等。不过,我的用户界面在某种程度上挂起。所以现在我想简单地处理没有WaitForExit 的Process.Exited 事件。
我的代码是:
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 event),然后在下载所有图像之后,
我希望Process.Exited 事件会触发一次。为什么会触发两次?
【问题讨论】:
-
你确定Start函数没有执行两次吗?还有其他订阅 Process_Complete 的地方吗?
-
能否请您改写倒数第二段,这次更仔细些?除了事件被引发两次(即第一句之后的所有内容都是乱码)之外,真的很难理解你想说什么。
-
@AlexFarber:这是一个很好的猜测,除了我 认为 OP 在他的倒数第二段中说,在进程进行时首先引发事件仍在运行。