C# 3.5 Winforms 应用程序。
我有一个计时器,它在单独的线程上每 30 秒触发一次(它所做的只是将一串文本写入 VS 输出窗口)。
我还有另一个线程等待某个进程在启动时结束。例如 winword.exe。
在那个线程中我有这个代码:
p.WaitForExit();
它会坐在那里等待winword.exe
退出。这很好用。
然而,当它坐在那里等待winword.exe
退出时,一个完全独立的线程(将文本发送到输出窗口)上的 30 秒计时器永远不会运行。
如果我等待 3 分钟(所以此时另一个计时器应该运行 6 次,但在等待时它不会WaitForExit()
),然后我退出winword.exe
;突然间,我的另一个计时器开始一次运行 6 次。就像有一个计时器事件的积压,突然.Net想要同时运行它。
p.WaitForExit()
即使我从应用程序中的单独线程(不是主 UI 线程)执行它,为什么似乎会阻止我的整个应用程序?
编辑:是的,它在一个单独的线程中。这是我用来启动它的代码:
try
{
Thread t = new Thread(ProcessCheck); // Kick off a new thread
t.Start();
ConfigLogger.Instance.LogInfo("++ ProcessCheck thread started @ " + DateTime.Now);
}
catch (Exception ipwse)
{
ConfigLogger.Instance.LogInfo(ipwse.Message + " " + ipwse.StackTrace);
}
这是我拥有的 ProcessCheck() 方法:
foreach (Process p in System.Diagnostics.Process.GetProcessesByName("winword"))
{
this.Invoke(new MethodInvoker(delegate()
{
try
{
p.WaitForExit();
}
catch (Exception)
{
}
}));
}