У меня есть экземпляр System.Timers.Timer
, созданный в основном потоке. Теперь я вызываю timer.Stop()
, чтобы попытаться завершить это время и хочу подождать, пока таймер действительно не будет завершен. Как я мог это сделать?.Net: как подождать, пока System.Timers.Timer остановится
Есть ли какой-либо подобный метод, например System.Threading.Thread.Join()
?
Вот некоторые коды
//the main thread:
var aTimer = New Timer();
aTimer.Elapsed += SomeTimerTask;
aTimer.AutoReset = True;
aTimer.Start();
//some other logic...
//stop that timer:
aTimer.Stop();
//now I need to wait until that timer is really stopped,
//but I cannot touch the method SomeTimerTask().
//so I need something like System.Threading.Thread.Join()...
https://msdn.microsoft.com/en-us/library/system.timers.timer.stop(v=vs.110).aspx имеет образец кода, который показывает, как избежать этой точной проблемы. – paxdiablo
Что бы вы действительно хотели сделать, чтобы событие Elapsed не запускалось снова. Вы не можете получить такую гарантию, [вам нужно будет проверить] (http://stackoverflow.com/a/4810724/17034) в обработчике событий. Однако рассмотрите System.Threading.Timer, его перегрузка Dispose (WaitHandle) обеспечивает гарантию. –