我的问题如下:怎样在代码片段之间设置一个延时,举例如下:public void hanshu()
{
/*
代码1
*///延时点/*
代码2
*///延时点/*
代码3
*/
}我知道 用while可以延时,比如 
int i=0;
while(i<1000000){ Application.DoEvents(); i++; }但这样的做法是很耗CPU资源的。有没有定时器的使用方法可以实现这个需求,timercallback 回调方法,需要另写一个函数,不满足我的需求。请大家帮忙。

解决方案 »

  1.   

    当然也不能用 thread.sleep 了,这样都睡死了。
      

  2.   

    while(i < 1000)
    {
       Application.DoEvents(); 
       Thread.Sleep(100);
       i++;
    }
      

  3.   


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

  4.   


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

  5.   

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

  6.   

    那就用上面我给你的方法, Application.DoEvent + Thread.Sleep(100) 这样CPU就不会高了。
      

  7.   

     建议你看看ManualResetEvent的用法
      

  8.   

    //你把不使用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();
       }));
    }
      

  9.   

    以前在另外一种开发 语言用过, delay(1)
      

  10.   

    Thread.Sleep(1000) 然当前线程等待