C#怎样在代码段之间设置延时?

Flymorn 2011-04-16 12:59:10
我的问题如下:怎样在代码片段之间设置一个延时,举例如下:

public void hanshu()
{
/*
代码1
*/

//延时点

/*
代码2
*/

//延时点

/*
代码3
*/
}



我知道 用while可以延时,比如


int i=0;
while(i<1000000){ Application.DoEvents(); i++; }



但这样的做法是很耗CPU资源的。

有没有定时器的使用方法可以实现这个需求,timercallback 回调方法,需要另写一个函数,不满足我的需求。

请大家帮忙。
...全文
808 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang1216 2011-04-16
  • 打赏
  • 举报
回复
我来看看大家能给出什么更好的办法。
无牛刀 2011-04-16
  • 打赏
  • 举报
回复
以前在另外一种开发 语言用过, delay(1)
无牛刀 2011-04-16
  • 打赏
  • 举报
回复
可以调用cpu 的延时
hjx398 2011-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 flymorn 的回复:]
引用 3 楼 hjx398 的回复:

C# code
是的,我已经新开了线程,但是多线程里通过 invoke 委托回调了UI窗体的控件,所以一用sleep还是睡死。

[/Quote]
//你把不使用UI线程的代码放到invoke方法的外面了吗?
例如下面的代码会一直占用UI线程:
void test()
{
this.invoke(new Action(()=>
{
int n=0;
for(var i=0;i<1000000;i++)
{
n+=i
}
this.Text=n.ToString();
}));
}
//下面的就不会,只有在需要UI线程的时候使用
void test()
{
int n=0;
for(var i=0;i<1000000;i++)
{
n+=i
}
this.invoke(new Action(()=>
{

this.Text=n.ToString();
}));
}
窗户纸 2011-04-16
  • 打赏
  • 举报
回复
建议你看看ManualResetEvent的用法
foxd 2011-04-16
  • 打赏
  • 举报
回复
Thread.Sleep()
dickens88 2011-04-16
  • 打赏
  • 举报
回复
定时器其实就是新开一个线程
机器人 2011-04-16
  • 打赏
  • 举报
回复
那就用上面我给你的方法, Application.DoEvent + Thread.Sleep(100) 这样CPU就不会高了。
zengguoyu 2011-04-16
  • 打赏
  • 举报
回复
Thread.Sleep(1000) 然当前线程等待
Flymorn 2011-04-16
  • 打赏
  • 举报
回复
延时点 只是延时,不需要处理其他事件。
Flymorn 2011-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fangxinggood 的回复:]

还是要在延时点 等待别的处理? 如果是应该用 WaitHandler 而不是自己设置等待时间。
或者让异步方法回调
[/Quote]

能举个例子么,谢谢啊
机器人 2011-04-16
  • 打赏
  • 举报
回复
还是要在延时点 等待别的处理? 如果是应该用 WaitHandler 而不是自己设置等待时间。
或者让异步方法回调
Flymorn 2011-04-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hjx398 的回复:]

C# code

//不用循环,不用Thread.Sleep(n),
//那你用var a=1+2+3+4+5....+1000000000000000000?
其实你是不想程序卡死事吗?要是这样的话你可以新开一个线程呀
Thread newThread=new Thread(hanshu);
[/Quote]

是的,我已经新开了线程,但是多线程里通过 invoke 委托回调了UI窗体的控件,所以一用sleep还是睡死。

hjx398 2011-04-16
  • 打赏
  • 举报
回复

//不用循环,不用Thread.Sleep(n),
//那你用var a=1+2+3+4+5....+1000000000000000000?
其实你是不想程序卡死事吗?要是这样的话你可以新开一个线程呀
Thread newThread=new Thread(hanshu);
机器人 2011-04-16
  • 打赏
  • 举报
回复
while(i < 1000)
{
Application.DoEvents();
Thread.Sleep(100);
i++;
}
Flymorn 2011-04-16
  • 打赏
  • 举报
回复
当然也不能用 thread.sleep 了,这样都睡死了。

110,529

社区成员

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

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

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