我在form中创建了个计时器timer,C#怎样处理form界面卡死问题

我在form中创建了个计时器timer,timer时间中调用处理方法Run(),实现定时任务,同时定时任务在执行过程中会刷新状态栏数据,但是每次执行过程中form就是卡死,结果状态栏每次看到都是最后一次的刷新的情况?请问要怎么解决?

Run的代码就是普通函数,读取文件,因为文件比较多耗时长

这个提供了 backgroundworker 控件来实现你需求的,timer控件和界面同一个线程跑,大任务会卡界面

现在也有 async/await 语法 可以试试

用this.begininvoke

按理说timer也是开新的线程,不会影响UI的,这样,我建议你开个新的线程,然后里面放timer试试

System.Windows.Forms.Timer这个是和主窗体同线程的,所以会卡住,用这个System.Timers.Timer

不,他只是单线程,但不是主线程。
具体卡顿原因,需要找UI界面更新的代码,或者看读取文件的代码。

要测试timer是不是主线程也很简单,
你设置Interval =1 ,事件是更新textbox1的文本框。
然后你在操作界面上第二个文本框,看看卡不卡就知道了。

System.Windows.Forms.Timer的单线程,
只是体现在,第一个任务没完成,那么轮训的第二个任务就不会触发。
直到第一个任务完成,然后间隔Interval的时间后,才会执行第二个任务。

我之前也是遇到了这个问题,其实这个问题线程是一方面,更重要的是程序片段部分,你说你的是文件处理,我之前也是这样。其实在打开文件,与文件建立连接的 时候会造成ui卡顿,一般timer里面不要重复打开关闭文件操作,这样会很费时间。我之前将与一个模拟器建立连接的程序片段放到timer里面,每次连 接都会造成ui卡顿,然后我换了线程,发现如果重复连接还是会论坛发帖机影响(这可以考虑是cpu的问题)。anyway,最后我把连接的片段弄出来就好了。希望能 帮助到你。

推荐你用thread 然后sleep一段时间执行如此循环。需要刷新winform就invoke就行了。

用这个System.Timers.Timer

线程异步执行

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页