我想实现以下逻辑:
private static AutoResetEvent _autoResetEvent = new AutoResetEvent(false);
static void Main(string[] args)
{
var someObjectInstance = new SomeObject();
someObjectInstance.SomeEvent += SomeEventHandler;
_autoResetEvent.WaitOne();
//...
}
static void SomeEventHandler()
{
_autoResetEvent.Set();
}
所以Main方法应该等到第一次调用SomeEvent。据我所知_autoResetEvent.WaitOne阻塞线程所以应该在另一个线程中引发SomeEvent。但我怎么能保证呢?
答案 0 :(得分:0)
一旦主线程将到达_autoResetEvent.WaitOne()
,它将被阻止,直到将发出该事件对象的信号。如果AutoResetEvent
对象永远不会发出信号,那么等待WaitOne()
的线程将无限期地阻塞(假设没有人在主线程上抛出InterruptException
,并且没有超时值传递给WaitOne()
方法)。
答案 1 :(得分:0)
所以你想从另一个线程中引发事件?以下代码就是这样做的。
public class Program
{
private static AutoResetEvent _autoResetEvent = new AutoResetEvent(false);
static void Main(string[] args)
{
var someObjectInstance = new SomeObject();
someObjectInstance.SomeEvent += SomeEventHandler;
var thread = new Thread(
() =>
{
someObjectInstance.DoSomethingThatRaisesSomeEvent();
});
thread.Start();
_autoResetEvent.WaitOne();
//...
}
static void SomeEventHandler()
{
_autoResetEvent.Set();
}
}