control.BeginInvoke(delegate)がデリゲートの呼び出しに失敗することがあることに気づきました。BeginInvokeはPostMessageを作成するだけであり、そのメッセージは後でアプリケーションによって処理されることを理解しています(デフォルトの投稿メッセージの制限は10,000です)。アプリケーションがそれほど複雑ではないことを考えると、デリゲートの実行に失敗する可能性がある他の理由はありますか?私のコードは以下のようなものです。
class MyClass : Form{
private bool executing = false;
private delegate void DelegateBar(string info, int total, bool status, object obj);
private void Bar(string info, int total, bool status, object obj){
log("Enterning Bar");
// Update something on UI
executing = false;
log("Exiting Bar");
}
public void foo(){
log("Entering Foo");
executing = true;
try{
// do something over the network
}catch(Exception e){
// probably network down. Lets not worry about it
}
DelegateBar barPtr = new DelegateBar(Bar);
// Update UI .. call on form : form is a control
this.BeginInvoke(barPtr, new object[] {"someInfo", 3, false, null});
log("Exiting Fool");
}
public void callMeEveryFiveSeconds(){
if(!executing) foo();
}
private delegate void DelegateCallMe();
// execute every 5 seconds.
private void timer1_Tick(object sender, EventArgs e)
{
Delegate del = new DelegateCallMe(callMeEveryFiveSeconds);
// appoligies if syntax is not right, it to convey the idea that callMeEveryFiveSeconds is called on the main thread (asynchronously)
this.beginInvoke(del, new object[]{});
}
}