0
我已經在我的示例應用程序下面的代碼:MaualResetEventSlim沒有停止線程
private static ManualResetEventSlim _screenSaverOn = new ManualResetEventSlim();
private static ManualResetEventSlim _screenSaverOff = new ManualResetEventSlim();
在我已經初始化兩個線程類的構造函數:由這些線程執行
Thread threadOn = new Thread(CheckIfScreenSaverIsOn) {IsBackground = true};
Thread threadOff = new Thread(CheckIfScreenSaverIsOff) {IsBackground = true};
threadOn.Start();
threadOff.Start();
的方法是:
private static void CheckIfScreenSaverIsOn()
{
log.Info("Thread1 - started running");
while (true)
{
if (NativeMethods.IsScreensaverRunning())
{
log.Info("Thread1 - Screen Saver Started Running");
_screenSaverOff.Set();
log.Info("Thread1 - Waiting");
_screenSaverOn.Wait();
log.Info("Thread1 - Started Again");
}
Thread.Sleep(2000);
}
}
private static void CheckIfScreenSaverIsOff()
{
log.Info("Thread2 - Started Running");
_screenSaverOff.Wait();
while (true)
{
// returns true/false
if (!NativeMethods.IsScreensaverRunning())
{
log.Info("Thread2 - Screen Saver Stopped Running");
_screenSaverOn.Set();
log.Info("Thread2 - Waiting");
_screenSaverOff.Wait();
log.Info("Thread2 - Started Again");
}
Thread.Sleep(2000);
}
}
我面臨的問題是,「thread2」沒有得到即使在調用_screenSaverOff.Wait()方法後也會被阻止。登錄如下條目:
2014-01-24 16:43:16,087 [4] INFO SystemEvent.TimeTracker Thread1 - started running
2014-01-24 16:43:16,088 [5] INFO SystemEvent.TimeTracker Thread2 - Started Running
2014-01-24 16:46:16,129 [4] INFO SystemEvent.TimeTracker Thread1 - Screen Saver Started Running
2014-01-24 16:46:16,130 [4] DEBUG SystemEvent.TimeTracker Original Start Time : 01/24/2014 16:43:16
2014-01-24 16:46:16,131 [4] DEBUG SystemEvent.TimeTracker Current Time : 01/24/2014 16:46:16
2014-01-24 16:46:16,131 [4] DEBUG SystemEvent.TimeTracker Total Active Minute : 3
2014-01-24 16:46:16,188 [4] INFO SystemEvent.TimeTracker Thread1 - Waiting
2014-01-24 16:46:26,189 [5] INFO SystemEvent.TimeTracker Thread2 - Screen Saver Stopped Running
2014-01-24 16:46:26,189 [4] INFO SystemEvent.TimeTracker Thread1 - Started Again
2014-01-24 16:46:26,189 [5] INFO SystemEvent.TimeTracker Thread2 - Waiting
2014-01-24 16:46:26,189 [5] INFO SystemEvent.TimeTracker Thread2 - Started Again
2014-01-24 16:46:28,191 [5] INFO SystemEvent.TimeTracker Thread2 - Screen Saver Stopped Running
2014-01-24 16:46:28,191 [5] INFO SystemEvent.TimeTracker Thread2 - Waiting
2014-01-24 16:46:28,191 [5] INFO SystemEvent.TimeTracker Thread2 - Started Again
2014-01-24 16:46:30,191 [5] INFO SystemEvent.TimeTracker Thread2 - Screen Saver Stopped Running
2014-01-24 16:46:30,191 [5] INFO SystemEvent.TimeTracker Thread2 - Waiting
2014-01-24 16:46:30,191 [5] INFO SystemEvent.TimeTracker Thread2 - Started Again
2014-01-24 16:46:32,192 [5] INFO SystemEvent.TimeTracker Thread2 - Screen Saver Stopped Running
感謝 爬完米什拉
**手動**重置事件,並且在您的代碼中沒有看到任何對這些事件調用「重置」的任何事件 - 一旦它們被設置,它們就會保持設置。 –