关于C# 如何关闭Timer所执行的已阻塞的方法
大家好,我的主程序中有个Timer,每五秒触发一次Timer_Tick方法,为了保证同一时间只有一个Timer_Tick方法被执行,所以在Timer_Tick的开头便写了Timer.Enable=false;然后在Timer_Tick的结尾写Timer.Enable=true;
Timer_Tick()
{
Timer.Enable=false;
SendMessage();
Timer.Enable=true;
}
SendMessage()方法中,调用了一个dll中的发送信息的方法A,而这个方法A,有一定几率彻底阻塞(是这个dll的BUG,而我又无法改变),所以一出现这种情况,本次的Timer_Tick()就彻底卡在这里了。
为了解决这个问题,我在SendMessage中,又起了一个新的计时器Timer_TimeOut,在执行方法A之前开始计时,如果A可以在短时间内执行过去,则关闭Timer_TimeOut。如果卡在了A处,则Timer_TimeOut到60秒后,就可以通知主程序,本次Timer_Tick()卡死了。
接下来,我就可以在Timer_TimeOut_Tick中再次设置Timer.Enable=true;即可再次启动新的Timer_Tick()。
问题来了,当我在Timer_TimeOut_Tick中再次设置Timer.Enable=true;启动新的Timer_Tick()后,第一个启动的Timer_Tick方法,会被系统回收吗?我不希望这个Timer_Tick一直卡在那里,否则,很有可能,会产生一堆阻塞的Timer_Tick方法。
谢谢大家。