winfrom程序,不能用线程,因为控件不支持。
让程序等待10秒后继续执行。
我的方法,肯定是行不通啦,timer3_Tick根本不执行。就无限循环在while里了。
public  bool IsTime = true;
        private void waitTimes()
        {
            timer3.Interval = 10000;
            timer3.Start();
            while (IsTime)
            {
                
            }
            timer3.Stop();
            IsTime = true;
        }        private void timer3_Tick(object sender, EventArgs e)
        {
            IsTime = false;
        }

解决方案 »

  1.   

    Timer的本质也是用了线程啊,只是封装了你看不到而已。直接Thread.Sleep(10000)为什么不行
      

  2.   

    Thread.Sleep(10000)这样应该可以,当前线程会被阻塞10秒,
      

  3.   

    是这样的,我在程序里用webbrowser有序的打开几个页面,然后获取页面内容,页面上有很多的控件会触发多次completed。所以想干脆让程序等10秒,可是webbrowser似乎不支持跨线程操作,所以无法让主线程等待子线程打开网页。各位想想办法吧,谢啦。
      

  4.   

    按照你描述的意思应该是:你打开的网页在走完特定的一个completed事件后触发你主程序中的事件或者方法
    那么根据这个特定事件中的标记去触发完全就可以啊  不用用timer控件的
      

  5.   

    在你的while里加上
    Thread.sleep(10);
    Applictaion.DoEvents();
    就好了。
    不管男人女人,都一样
      

  6.   

    不知道你想让哪个线程等待,但web控件跨线程操作可以用控件的invoke方法实现。
      

  7.   

    SpinWait或者TickCount,InterLocked循环锁都可以设计大约10秒后继续; --这个是“纯”浪费CPU时间
    ThreadPool.RegisterWaitForSingleObject 也可以设计延时;--这个是等待信号
    System.Thread.Timer可以设置延时10s后执行;--只是构造器的设置
    WaitHandle也可以 --等待信号量
      

  8.   

    那请问webbrowser是winfrom也可以吗,我先试试其他的。谢谢。
      

  9.   

    不是想性别歧视,呵呵。这样的话和直接sleep一样,我上一步是操作webbrowser打开一个网页,结果网页没被打开,就被sleep了。
      

  10.   

    把你的while拆了,分成两函数。
    在timer里,计时到了,再执行第二个函数
      

  11.   

    我上一步是操作webbrowser打开一个网页,直接用线程sleep的话打开网页也会被阻塞10秒,webbrowser又不支持我用子线程去操作。您上边的方法哪个更适合呢?
      

  12.   

    在你的while里加上
    Thread.sleep(10);
    Applictaion.DoEvents();
      

  13.   

    你把打开网页后要执行的内容写在timer3里即可        private void waitTimes()
            {
                timer3.Interval = 10000;
                timer3.Start();
                打开几个页面
            }        private void timer3_Tick(object sender, EventArgs e)
            {
                页面打开后要做的事
            }
      

  14.   

    你需要知道一件事情就可以了,Timer.Start 之后,会立即执行一次!