【发布时间】:2014-08-04 20:00:17
【问题描述】:
我有一个 WPF 应用程序,它曾经通过 Environment.Exit 关闭。由于这导致我的自动化 UI 测试出现问题,我将现有应用程序更改为 Application.Current.ShutDown。
这工作正常,除了有一个线程正在等待脉冲 (Monitor.Wait),它使进程保持运行,因为它不再被脉冲。
我认为这很容易解决,但从我的应用程序退出点(Application.Current.ShutDown)开始,很难检索对持有等待线程的对象的引用(以强制脉冲它,以便它可以退出)。
我试图用谷歌搜索一个合适的答案,但运气不佳。有没有“简单的方法”解决这个问题?还是我应该已经开始重构? :)
一些sn-ps:
线程是这样创建的
workerThread = new Thread(Worker) { Name = logName, IsBackground = true};
在Worker方法中,Monitor.Wait被调用
while ((action = GetNextTask(out task)) == ProductPreparationAction.None)
{
Monitor.Wait(preparationTasks);
}
【问题讨论】:
-
您正在查看问题的错误线程,将 IsBackground 设置为 true 的线程无法阻止应用程序终止。使用 Debug + Windows + Threads 调试器窗口查找问题制造者。
标签: c# wpf multithreading monitor background-thread