正如我们所知,每个计时器都在一个单独的线程上进行回调。有没有办法在c#中中止计时器线程?假设在长时间运行的操作中阻塞了计时器线程。新线程如何中止被阻塞的线程? Thread.CurrentThread指向调用线程而不是被阻塞的线程。
答案 0 :(得分:4)
使用WorkerSupportsCancellation将您的计时器实现为BackgroundWorker,并在手动编写的计时器中检查CancelPending?
答案 1 :(得分:1)
对我来说,最简单的方法是在计时器线程执行任何使用代码之前存储线程对象:
timerThread = System.Threading.Thread.CurrentThread;
然后当您需要中止时,请致电
timerThread.Abort();
编辑:根据评论,我会说中止线程并不是一个好主意。让它们优雅地终止是更好的。我建议向线程发送某种消息,可能只需设置一个标志,并让线程在找到该消息时自行终止。
答案 2 :(得分:0)
中止线程会导致异步异常。因此,中止线程的最佳方法是不要中止。而是使用互斥锁和信号量来发出取消信号,然后不断轮询取消状态。如果取消信号则不做任何事。