【发布时间】:2011-05-17 15:17:39
【问题描述】:
我在关闭一个使用 WaitForSingleObject() 的应用程序时遇到问题,该应用程序具有无限超时。
全图是这样的。我正在执行以下操作以允许我的应用程序处理设备唤醒事件:
通过以下方式注册活动:
CeRunAppAtEvent("\\\\.\\Notifications\\NamedEvents\\WakeupEvent",
NOTIFICATION_EVENT_WAKEUP);
启动一个新线程等待:
Thread waitForWakeThread = new Thread(new ThreadStart(WaitForWakeup));
waitForWakeThread.Start();
然后在目标方法中执行以下操作:
private void WaitForWakeup()
{
IntPtr handle = CreateEvent(IntPtr.Zero, 0, 0, "WakeupEvent");
while (true)
{
WaitForSingleObject(handle, INFINITE);
MessageBox.Show("Wakey wakey");
}
}
这一切正常,直到我尝试关闭应用程序时,可以预见的是,WaitForSingleObject 继续等待并且不允许应用程序正确关闭。我们一次只允许我们的应用程序的一个实例运行,并且我们在启动时检查这一点。它似乎会继续运行,直到设备被软重置。
有没有办法杀死 WaitForSingleObject 正在等待的句柄,强制它返回?
非常感谢。
【问题讨论】:
-
线程不是我的强项,但不是用细长的锁或其他东西来终止这样的东西的想法(我不确定这具体是什么)你永远坚持下去,你可以用它来强制它在关闭期间结束?
-
我试图中止线程(waitForWakeThread.Abort()),但我猜是因为它正在调用 WaitForSingleObject 它没有效果;没有抛出 ThreadAbortedException。
标签: c# multithreading winapi windows-ce waitforsingleobject