日期:2014-05-18  浏览次数:20838 次

菜鸟问题:不用线程,是男人就等10秒!
winfrom程序,不能用线程,因为控件不支持。
让程序等待10秒后继续执行。
我的方法,肯定是行不通啦,timer3_Tick根本不执行。就无限循环在while里了。
C# code
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;
        }


------解决方案--------------------
探讨
引用:
Thread.Sleep(10000)这样应该可以,当前线程会被阻塞10秒,

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

------解决方案--------------------
不知道你想让哪个线程等待,但web控件跨线程操作可以用控件的invoke方法实现。
------解决方案--------------------
SpinWait或者TickCount,InterLocked循环锁都可以设计大约10秒后继续; --这个是“纯”浪费CPU时间
ThreadPool.RegisterWaitForSingleObject 也可以设计延时;--这个是等待信号
System.Thread.Timer可以设置延时10s后执行;--只是构造器的设置
WaitHandle也可以 --等待信号量

------解决方案--------------------
把你的while拆了,分成两函数。
在timer里,计时到了,再执行第二个函数
------解决方案--------------------
你把打开网页后要执行的内容写在timer3里即可

private void waitTimes()
{
timer3.Interval = 10000;
timer3.Start();
打开几个页面
}

private void timer3_Tick(object sender, EventArgs e)
{
页面打开后要做的事
}