Ich starte einen Timer mit einer Callback-Funktion. Aber in dieser Callback-Funktion ändere/initialisiere ich ein statisches Objekt, das nach dem Start des Timers verwendet wird.Warten Sie, dass die Threading.Timer-Rückruffunktion endet
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);
}
}
Wenn ich die statische var verwende, habe ich eine Ausnahme "Argument außerhalb des Bereichs Ausnahme". Ich denke, das Problem ist, dass die Callback-Funktion ihre Ausführung nicht beendet hat und das Objekt noch nicht initialisiert wurde.
habe ich versucht, diese Lösung aber das funktioniert nicht:
// 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);
Aber mit diesem, es funktioniert:
Timer addbobs = new Timer((e) => callbackFunct("arg"), null, 0, 10000);
Thread.Sleep(2000);
Console.WriteLine(listDog[0].name);
Ich möchte, dass meine Callback-Funktion, bevor die nächste Anweisung ihre Ausführung beendet. Haben Sie eine Lösung für mein Problem?
Letzte Änderung: Ja, ich möchte in der Lage sein, Parameter zu callbackFunct passieren
Sie sollten keine NULL-Referenzausnahme erhalten, Sie sollten wahrscheinlich eine Ausnahme außerhalb des Bereichs erhalten. Können Sie uns den genauen Wortlaut der Ausnahme nennen? –
Ja, Entschuldigung, es ist eine "Ausnahme außerhalb des Bereichs" – Neyoh
'neuer Timer (callbackFunct, null, 0, 10000);' kompiliert nicht. Können Sie den tatsächlich verwendeten Code posten oder Ihren Beispielcode korrigieren, damit er kompiliert werden kann? – Quantic