我在关闭使用具有INFINITE timout的WaitForSingleObject()的应用程序时遇到问题.
全貌是这样的.我正在执行以下操作以允许我的应用程序处理设备唤醒事件:
注册活动:
CeRunAppAtEvent("\\\\.\\Notifications\\NamedEvents\\WakeupEvent",
NOTIFICATION_EVENT_WAKEUP);
Run Code Online (Sandbox Code Playgroud)
启动一个新线程等待:
Thread waitForWakeThread = new Thread(new ThreadStart(WaitForWakeup));
waitForWakeThread.Start();
Run Code Online (Sandbox Code Playgroud)
然后在目标方法中执行以下操作:
private void WaitForWakeup()
{
IntPtr handle = CreateEvent(IntPtr.Zero, 0, 0, "WakeupEvent");
while (true)
{
WaitForSingleObject(handle, INFINITE);
MessageBox.Show("Wakey wakey");
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都正常,直到我尝试关闭应用程序时,可以预见,WaitForSingleObject继续等待并且不允许应用程序正常关闭.我们只允许我们的应用程序的一个实例一次运行,我们在启动时检查这个.它似乎继续运行,直到设备软复位.
有没有办法杀死WaitForSingleObject正在等待的句柄,强制它返回?
非常感谢.