情况1
这是我的设置。
internal class MyClass
{
private ApiObject apiObject;
private bool cond1;
private bool cond2;
internal MyClass()
{
this.apiObject = new ApiObject();
this.apiObject.ApiStateUpdate += new ApiStateUpdateEventHandler(ApiStateHandler);
//wait for both conditions to be true
}
private void ApiStateHandler(string who, int howMuch)
{
if(who.Equals("Something") && howMuch == 1)
this.cond1 = true;
else if(who.Equals("SomethingElse") && howMuch == 1)
this.cond2 = true;
}
}
我怎样才能等待这两个条件都成立?
如果我做:
while(!(this.cond1 && this.cond2))
{
System.Threading.Thread.Sleep(1000);
}
中的代码ApiStateHandler()
似乎永远不会执行。
如果我做:
while(!(this.cond1 && this.cond2))
{
System.Windows.Forms.Application.DoEvents();
}
这可行,但似乎浪费资源和黑客攻击。
基本上我认为我需要一种方法来wait
但不阻塞线程。这样做的正确方法是什么?
案例2
第二种情况有些相似(并且相关),并说明了相同的问题。
internal class MyClass
{
private ApiNotifyClass apiNotifyClass;
private shouldContinue = false;
internal MyClass()
{
//in addition to the code from above
this.apiNotifyClass = new ApiNotifyClass();
this.apiNotifyClass.ApiFound += ApiNofityFoundEventHandler(ApiNotifyHandler);
}
internal void Send(SomethingToSend somethigToSend)
{
Verifyer verifier = this.apiObject.ApiGet(somethingToSend);
this.apiNotifyClass.ApiAttach(verifier);
//wait for the shouldContinue to be true
this.apiObject.ApiSend(verifier);
this.apiNotifyClass.ApiDetach(verifier);
}
private void ApiNotifyHandler()
{
this.shouldContinue = true;
}
}
调用Send()
时,Verifier
会创建对象,方法需要等待ApiNotifyHandler
执行(即ApiFound
事件发生)后才能调用ApiSend()
。
所以这与案例 1中的情况相同。我应该如何等待 shouldContinue 为真?
很抱歉这个很长的问题,但我想提供尽可能多的信息来帮助你帮助我。
[更新]
我被迫使用.Net 2.0。