C#如何在BackgroundWorker 后台线程中使用定时器?
答案:2 悬赏:40 手机版
解决时间 2021-04-02 21:33
- 提问者网友:我没有何以琛的痴心不悔
- 2021-04-02 02:12
C#如何在BackgroundWorker 后台线程中使用定时器?
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-04-02 02:51
Timer会导致窗体反应异常?
可能是你代码的问题吧?
你把代码给我看看?
其它的Timer跟Forms的Timer其实基本差不多
你也可以尝试用Thread执行一个无限循环的方法,比如:
while(true){
做事的代码
Thread.Sleep(1000);// 休眠一秒
}
可能是你代码的问题吧?
你把代码给我看看?
其它的Timer跟Forms的Timer其实基本差不多
你也可以尝试用Thread执行一个无限循环的方法,比如:
while(true){
做事的代码
Thread.Sleep(1000);// 休眠一秒
}
全部回答
- 1楼网友:忘川信使
- 2021-04-02 02:58
实际上,Timer并不只有你说的System.Windows.Forms.Timer一种。这个东西作为一个主线程(即UI线程)的控件,它的执行都会在UI线程,当然会造成线程阻塞,也就是你说的窗体未响应。
你可以尝试使用System.Threading.Timer,它可以实现控件Timer的一切功能。另外,和你说的System.Widnows.Forms.Timer不一样的是,它可以定义在非主线程中,当然它的定时执行方法也就不会影响到主线程了。
使用方法如下。
System.Threading.Timer timer = new System.Threading.Timer();//初始化
timer.Interval = 1000; //定时间隔1000ms
timer.Elapsed+=new EventHandler(timer_Elapsed);
private void timer_Elapsed()
{
//这里的代码每隔1秒时间就会运行,写你定时执行的事件即可
//并且,每次代码执行到这里,其实.NET内部都是用新的线程来处理这部分代码的
}
你将上面的东西封装成一个方法,注册到BackgroundWorker中,UI就不会假死的。
实际上,要在UI上定时调用异步,并且解决UI的假死,还有其他的方法,BackgroundWorker并不是唯一的选择。
你可以尝试使用System.Threading.Timer,它可以实现控件Timer的一切功能。另外,和你说的System.Widnows.Forms.Timer不一样的是,它可以定义在非主线程中,当然它的定时执行方法也就不会影响到主线程了。
使用方法如下。
System.Threading.Timer timer = new System.Threading.Timer();//初始化
timer.Interval = 1000; //定时间隔1000ms
timer.Elapsed+=new EventHandler(timer_Elapsed);
private void timer_Elapsed()
{
//这里的代码每隔1秒时间就会运行,写你定时执行的事件即可
//并且,每次代码执行到这里,其实.NET内部都是用新的线程来处理这部分代码的
}
你将上面的东西封装成一个方法,注册到BackgroundWorker中,UI就不会假死的。
实际上,要在UI上定时调用异步,并且解决UI的假死,还有其他的方法,BackgroundWorker并不是唯一的选择。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯