简要说明是我试图用我无法控制的第三方DLL启动几个连接事件。一旦发生连接,就会触发一个事件。
我需要在主线程上等待,直到发生这种情况,但每次我设置它都会锁定主线程。
private EventWaitHandle _waitForChannel = new AutoResetEvent(false);
致电代码
new Thread(StartInstrumentMonitoring).Start();
= ------------------
public void StartInstrumentMonitoring(){
if(this.instrumentList.Count == 0){
new Thread(startConnections).Start()
_waitForChannel.WaitOne();
= -----------------------------
public void startCOnnections(){
CODE HERE TO DETERMINE INSTRUMENT
instrument.connectionReceived += instrument_connectionEvent;
instrument_connectionEvent(object sender, ResultEventArgs e){
if (sender.Name == instrument.Identifier || sender.Identifier == instrument.Identifier)
_waitForChannel.Set();
}
此代码的问题在于,在执行StartInstrumentMonitoring后,它会向第三方DLL发出必要的调用并附加事件处理程序以与所述库进行交互。显然调用WaitOne()来阻止我主要的线程阻止我捕获instrument_ConnectionEvent
答案 0 :(得分:0)
如果根本没有调用instrument_ConnectionEvent
,那么第三方库当然可能会尝试在主线程上触发事件,这会导致当前代码出现死锁。
您可以使用简单的条件检查来查看您的连接是否已建立,而不是AutoResetEvent
。您可以在循环中调用Application.DoEvents()
以强制处理消息队列。
while(<check condition> == false)
{
Application.DoEvents();
}