这样的Timer该如何实现?

dxbamboo 2010-10-28 02:11:32
我在主窗体里有一个很复杂的数据运算,可以看成一个很大的for循环。
我想在数据运算时,每隔1s改变下主窗体上的一个label的背景颜色。
请教大家,该如何做呢?
我用了timer控件,和System.Timers.Timer。在数据运算时,都不能更新label。

谢谢
...全文
119 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxbamboo 2010-10-28
  • 打赏
  • 举报
回复
谢谢楼上,我用了backgroundworker来实现了。显示可以更新了。
但出现了另外一个问题,在我的放在backgroundwroker里的有个对剪贴板操作,在新线程里面无法操作。
这个问题该如何解决呢?
ywj157 2010-10-28
  • 打赏
  • 举报
回复
楼上xx_lzj的代码我没看懂!~~

我想,先不直接说代码,而是描述下实现过程。

我的理解:你的主程序在执行一个类似于For循环的操作,也就是一个死循环操作,希望每隔一段时间更新程序界面上某个控件(label)的属性。

那么,我的理解,你需要使用多线程来完成这个事情。CPU同时只做一个事情,你都让他(主程序所在的线程)执行计算的死循环了,在循环结束前,是不会做别的事情的。

使用多线程的法子有很多,楼上的使用UI方面的委托应该是一种方法,但我没用过——希望楼上有空能给我发个完整资料学习下。^_^

至于这个多线程怎么做~~我只会相对复杂的操作,就先不说代码了,只说思路。


我的思路是:
(1)把纯数字计算过程放在一个函数中,开一个线程执行这个函数。
(2)主线程,就是主程序窗口有一个timer。
(3)循环计算过程中,插入一个暂停N毫秒当前线程的操作。 如 当前线程.Sleep(10)。让你的主线程能有机会执行,执行其timer的事件。
loveyan52112 2010-10-28
  • 打赏
  • 举报
回复
但是随机整数范围要控制好,不要大于你的数组长度啊
loveyan52112 2010-10-28
  • 打赏
  • 举报
回复
这有什么难。你定义一个Color类型的数组,装一些你要的颜色进去,每隔一秒去随机产生一个随机整数,用来当做数组下标,在将Color数组中取出的颜色付给Label,但是时间空间要用Thread来控制以免阻塞当前进程,否则会很卡
ydlcom 2010-10-28
  • 打赏
  • 举报
回复
application doevent()搞定
xx_lzj 2010-10-28
  • 打赏
  • 举报
回复
这个问题讨论过多次:
private void timer1_Elapsed(.....)
{
this.Invoke(new UpdateUICallBack(UpdateUI));
}
private delegate void UpdateUICallBack();
private void UpdateUI()
{
// labelColorChange;
}
兔子-顾问 2010-10-28
  • 打赏
  • 举报
回复
如果ui线程被占用,你无法更新,只能主动的绘制窗体。你不妨把占用时间长的独立个线程来处理,让界面可以响应。
寒冰2046 2010-10-28
  • 打赏
  • 举报
回复
意思是说,你的运算需要很长的时间,比如说超过2秒?

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧