日期:2014-05-18  浏览次数:20757 次

请问如何解决timer在大量的计算时不会触发的问题?(WinForm)
我试了System.Timers.Timer和System.Windows.Form.Timer,发现都存在一个问题,那就是空闲时很好用,但一旦有大量计算,timer就不会触发,将它放在另一个线程里竟然也不行,请问有什么解决办法?谢谢!

------解决方案--------------------
System.Timers.Timer和System.Windows.Form.Timer如果触发时赶上非空闲,都会阻塞,不同之处前者排队,后者直接跳过。
根据你的描述,System.Windows.Form.Timer无法满足你的要求(它在ui线程上调用)
System.Timers.Timer缺省的,将在一个工作者线程上调用你的定时器事件处理函数

------解决方案--------------------
试试看在大量计算中添加Thread.Sleep(0)
例如:
for (int i = 0; i<int.Max; i++)
{
 // do something
 Thread.Sleep(0);
}
------解决方案--------------------
void pgbTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Thread.CurrentThread.Sleep(0);
SetProgress();
}
private void SetProgress()
{
if (this.InvokeRequired == true)
{
SetProgressCallBack sc = new SetProgressCallBack(Timer_Tick);
this.Invoke(sc);
}
else
{
Timer_Tick();
}

当你的所有工作都完成了就调用Thread的方法中止或者让它继续执行自动中止
------解决方案--------------------
要不你把你的代码发给我,我调试看看
ithurricane@126.com