コールバック関数を持つタイマーを起動します。しかし、このコールバック関数では、タイマーの起動後に使用される静的オブジェクトを変更/初期化します。Threading.Timerコールバック関数が終了するのを待つ
public class TimerExecute
{
// Assume that the "Dog" class exist with attribute Name initialized in the constructor
public static List<Dog> listDog = new List<Dog>();
public void callbackFunct(String param) {
// code...
listDog.Add(new Dog("Bob"));
// code...
}
public void Main() {
// add dogs Bob each 10sec
Timer addbobs = new Timer((e) => callbackFunct("arg"), null, 0, 10000);
// return argumentoutofrange exception
Console.WriteLine(listDog[0].name);
}
}
static varを使用すると、例外「out of range exception」が発生します。私は問題は、コールバック関数が彼女の実行を完了せず、オブジェクトがまだ初期化されていないことだと思います。
私は、このソリューションを試してみましたが、これは動作しません:
// add dogs Bob each 10sec
Timer addbobs = new Timer((e) => callbackFunct("arg"), null, 0, 10000);
WaitHandle h = new AutoResetEvent(false);
addbobs.Dispose(h);
Console.WriteLine(listDog[0].name);
しかし、これで、それが動作します:
Timer addbobs = new Timer((e) => callbackFunct("arg"), null, 0, 10000);
Thread.Sleep(2000);
Console.WriteLine(listDog[0].name);
私は私のコールバック関数は、次のステートメントの前に彼女の実行を終了することを望みます。 あなたは私の問題の解決策をお持ちですか?
最終編集:はい、私はあなたがnew TimerCallback(callbackFunct)
の代わりに、関数の名前だけであなたのTimerCallback
を初期化する必要がありますかなり確信しているcallbackFunct
null参照例外が発生することはありません。範囲外のインデックス例外が発生する可能性があります。例外の正確な表現を教えていただけますか? –
ありがとうございます。「範囲外の例外」 – Neyoh
'new Timer(callbackFunct、null、0、10000);'はコンパイルされません。実際に使用しているコードを投稿したり、サンプルコードを修正してコンパイルできますか? – Quantic