這是我的設置。
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
對象將被創建,並且該方法需要調用ApiSend()
之前等待ApiNotifyHandler
執行(即,要發生的ApiFound
事件)。
所以這和案例1的情況是一樣的。我應該如何等待應繼續爲真?
對不起,我想盡可能提供儘可能多的信息來幫助你。
[更新]
我被迫使用的.Net 2.0。
我編輯了這個問題:限制到.Net 2.0。 – Yeseanul
@Yeseanul,我已經更新了答案。 – Noseratio
感謝您的回覆。有兩件事:'myObject.Initialized = delegate'應該使用'= ='而不是'=',並且'var'在.Net 2.0中不可用(也許你可以做這兩個更改以便我可以接受答案)。我已經測試了第一個解決方案,它工作正常。 – Yeseanul