首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信号前AutoResetEvent火灾

信号前AutoResetEvent火灾
EN

Stack Overflow用户
提问于 2012-02-21 10:34:26
回答 1查看 3.1K关注 0票数 1

我有两种与下面的方法相似的方法。在MainThreadDoWork方法中,不管OtherThreadWork方法中的autoResetEvent.Set()如何,循环都是完成执行的。知道这个AutoResetEvent实例中发生了什么吗?

代码语言:javascript
复制
AutoResetEvent autoResetEvent = new AutoResetEvent(true);
private int count = 10;

private void MainThreadDoWork(object sender, EventArgs e)
{
    for (int i = 0; i < count; i++)
    {
        if (autoResetEvent.WaitOne())
        {
            Console.WriteLine(i.ToString());
        }
    }
}

private void OtherThreadWork()
{
    autoResetEvent.Set();
    //DoSomething();
}

编辑

下面是实际OtherThreadWork的样子。

代码语言:javascript
复制
  private void OtherThreadWork()
    {
        if (textbox.InvokeRequired)
        {
            this.textbox.BeginInvoke(new MethodInvoker(delegate() { OtherThreadWork(); }));
            autoResetEvent.Set();
        }
        else
        {
           // Some other code
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-21 10:37:29

传递给AutoResetEvent构造函数的布尔参数指定事件是否以信号状态创建。

您已经将其创建为信号状态,因此您的第一个WaitOne不会阻塞。

尝试:

代码语言:javascript
复制
AutoResetEvent autoResetEvent = new AutoResetEvent( false );
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9375977

复制
相关文章

相似问题

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