在C#界面加了一个定时器,启动后会执行一个耗时的计算,导致界面很卡,请问有什么办法解决
多线程里有
System.Threading.Timer代替控件Timer
或者你把Timer_Tick事件里的代码用多线程处理,这有Timer控件就在多线程外了
再或者你多线程要用委托来处理,这有控件Timer就可以在多线程里访问了
以上三个方法你任选一个
这是最直接的,只是会发生一种情况,要考虑到:
耗时操作的时间不能大于定时器的间隔,也就是说定时器触发时,前面的耗时操作必须完成,不然就重复。
必须对这种情况做出选择和处理。
System.Timers.Timer ti = new System.Timers.Timer();
ti.Elapsed += new ElapsedEventHandler(this.ti_Elapsed);
private void ti_Elapsed(object sender, ElapsedEventArgs e)
{
tin.Interval = 1000; //时间间隔
//定时启动事件
}
private void Form1_Load(object sender, EventArgs e)
{
tin.Interval = 1000;
tin.Enabled = true;
}
这个是一个解决办法,但是它违背了定时器原本的需求:间隔xxxxx毫秒触发一次。
这样子操作,每次间隔时间=tin.Interval+操作耗时。后者是不确定的。允许这样的需求就可以,否则不行。