AutoResetEvent огонь до сигнала - PullRequest
       23

AutoResetEvent огонь до сигнала

1 голос
/ 21 февраля 2012

У меня есть два метода, аналогичных приведенным ниже.В методе MainThreadDoWork цикл завершается независимо от autoResetEvent.Set () в методе OtherThreadWork.Любая идея, что происходит в этом экземпляре AutoResetEvent?

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.

  private void OtherThreadWork()
    {
        if (textbox.InvokeRequired)
        {
            this.textbox.BeginInvoke(new MethodInvoker(delegate() { OtherThreadWork(); }));
            autoResetEvent.Set();
        }
        else
        {
           // Some other code
        }
    }

1 Ответ

4 голосов
/ 21 февраля 2012

Логический параметр, передаваемый конструктору AutoResetEvent, указывает, создано событие в сигнальном состоянии или нет.

Вы создаете его уже в сигнальном состоянии, поэтому ваш первый WaitOne не будет блокироваться.

Попробуйте:

AutoResetEvent autoResetEvent = new AutoResetEvent( false );
...