首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MaualResetEventSlim不停止线程

MaualResetEventSlim不停止线程
EN

Stack Overflow用户
提问于 2014-01-24 11:26:04
回答 1查看 38关注 0票数 0

我的示例应用程序中有以下代码:

代码语言:javascript
复制
private static ManualResetEventSlim _screenSaverOn = new ManualResetEventSlim();
private static ManualResetEventSlim _screenSaverOff = new ManualResetEventSlim();

在类的构造函数中,我初始化了两个线程:

代码语言:javascript
复制
Thread threadOn = new Thread(CheckIfScreenSaverIsOn) {IsBackground = true};
Thread threadOff = new Thread(CheckIfScreenSaverIsOff) {IsBackground = true};

threadOn.Start();
threadOff.Start();

这些线程执行的方法如下:

代码语言:javascript
复制
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”也不会被阻塞。日志条目如下:

代码语言:javascript
复制
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

谢谢Pawan Mishra

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 11:31:05

您正在使用手动重置事件,但从未重置它们。您需要调用重置,否则一旦设置好它们,它们就会一直保持信号状态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21331460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档