[初学求助]这样的顺序执行,我该如何写这个程序?需要Timer?[内详]

jimodeduzou 2010-10-11 10:35:13
设备:
PC + 外设硬件 (USB连接)

程序主要目的如下:
1: Form 背景颜色从 Color.FromArgb(0,0,0) 到 Color.FromArgb(255,255,255)变化
2: Form 背景颜色 每变化一次要执行 外设硬件的 work() 方法一次.

目前的问题是
1: work()方法必须确保 Form 背景颜色 已经变化为对应的 Color.FromArgb(i,i,i) 后方可执行一次.
2: work()方法执行时间大概1s左右, work()完成后 Form 背景颜色方可变化为 Color.FromArgb(i++,i++,i++), 如此反复递增循环.

初学C# 很多地方不懂, 还请各位哥哥姐姐帮忙看看,有没有什么好方法.

//最开始使用类似下面这种方法(第一次的work()总是会在画面上Form从defualtcolor改变为Color.FromArgb(0, 0, 0)之前先执行.结果导致第一次执行时对应Color是错误的.
//发现Thread.Sleep(100);这句没什么作用, BackColor 的改变 可能在work()开始执行了之后才发生....
for (int i = 0; i < 256; i += 16)
{
this.BackColor = Color.FromArgb(i, i, i);
Thread.Sleep(100);
work();
Thread.Sleep(1000);
}

//后来换成这种,发现效果也不佳....
for (int i = 0; i < 256; i += 16)
{
this.BackColor = Color.FromArgb(i, i, i);
}

private void Form1_BackColorChanged(object sender, EventArgs e)
{
Thread.Sleep(500);
work();
Thread.Sleep(1000);
}

//再后来我换成Form里面的Timer 将this.BackColor = Color.FromArgb(i++, i++, i++);work();写入 timer1_Tick 事件
//效果还是一样,第一次的执行总是work()先执行了结果BackColor才变成0 开始变化....



我想知道
有没有什么办法 可以使 this.BackColor = Color.FromArgb(0,0,0) 执行 过一段时间后再执行work(), 以此来确保画面刷新到对应的Color.FromArgb(i,i,i);后才会work() ?

请各位哥哥姐姐帮忙想想,如果有更好的编程思路也行. 非常的感谢!

...全文
98 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimodeduzou 2010-10-12
  • 打赏
  • 举报
回复
非常非常的感谢,终于解决了!
有点不明白的是,什么原因会导致窗体还没有重绘完成就跑去执行下面的了...按道理说不都是一瞬间的事情吗...汗
gomoku 2010-10-12
  • 打赏
  • 举报
回复
可以用this.Update();或者Application.DoEvents();来更新界面,然后再调用work():
int i = -1;
void timer1_Tick(object sender, EventArgs e)
{
if( i++ < 255 )
{
this.BackColor = Color.FromArgb(i,i,i);
Application.DoEvents(); //<---
work();
}
}

111,129

社区成员

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

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

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