好吧,我已经搜索了很多解决方案.我正在寻找一种干净简单的方法来防止在我停止后调用System.Threading.Timer的回调方法.
我似乎无法找到任何东西,这导致我,在偶尔,诉诸可怕的线程 - thread.sleep-thread.abort组合颤抖.
可以用锁来完成吗?请帮我找到一个好办法.谢谢
当您使用a Timer或者Thread只运行程序的整个生命周期时,您是否需要保留对它们的引用以防止它们被垃圾回收?
请放下以下程序可以timer作为类中的静态变量的事实,这只是一个展示问题的玩具示例.
public class Program
{
static void Main(string[] args)
{
CreateTimer();
Console.ReadLine();
}
private static void CreateTimer()
{
var program = new Program();
var timer = new Timer();
timer.Elapsed += program.TimerElapsed;
timer.Interval = 30000;
timer.AutoReset = false;
timer.Enabled = true;
}
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
var timerCast = (Timer)sender;
Console.WriteLine("Timer fired at in thread {0}", GetCurrentThreadId());
timerCast.Enabled = true;
}
~Program()
{
Console.WriteLine("Program Finalized");
}
[DllImport("kernel32.dll")]
static extern uint GetCurrentThreadId(); …Run Code Online (Sandbox Code Playgroud)