Я запускаю таймер с функцией обратного вызова. Но в этой функции обратного вызова я изменяю/инициализирую статический объект, который используется после запуска таймера.Дождаться завершения функции обратного вызова 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);
}
}
Когда я использую статический var, у меня есть исключение «исключение вне диапазона». Я думаю, проблема заключается в том, что функция обратного вызова не завершила ее выполнение, и объект еще не инициализирован.
Я попытался это решение, но это не работает:
// 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);
Я хочу, чтобы моя функция обратного вызова завершает ее выполнение до следующей инструкции. У вас есть решение проблемы?
Последнее редактирование: Да, я хочу, чтобы иметь возможность передавать параметры callbackFunct
Вы не должны получать исключение для ссылки на null, вероятно, вы должны получить исключение из диапазона исключений. Можете ли вы дать нам точную формулировку исключения? –
Да, извините, это исключение из аргумента вне диапазона – Neyoh
'новый таймер (callbackFunct, null, 0, 10000);' не компилируется. Можете ли вы опубликовать код, который вы используете, или исправить код примера, чтобы он компилировался? – Quantic