private void s() //(1)
{
if(t())
{...}
}private bool t()
{
System.Timers.Timer timer1 = new System.Timers.Timer(10000);
timer1.AutoReset = true;
timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true; //(2)
if (timer1.Enabled == false) //(3)
{
return true;
}
}void timer1_Elapsed(object sender, ElapsedEventArgs e) //(4)
{
//只做延时用
timer1.Enabled = false;
}
上面的代码从(1)开始,函数t()一定要是bool型的,timer1是做延时用的,本来想用sleep,但是整个程序都死,不符合要求.现在我想启动timer1后就进入到timer1_Elapsed,然后再执行(3),也就是说从(2)到(4),(4)执行完后再执行(3),请问要怎么做?
{
if(t())
{...}
}private bool t()
{
System.Timers.Timer timer1 = new System.Timers.Timer(10000);
timer1.AutoReset = true;
timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true; //(2)
if (timer1.Enabled == false) //(3)
{
return true;
}
}void timer1_Elapsed(object sender, ElapsedEventArgs e) //(4)
{
//只做延时用
timer1.Enabled = false;
}
上面的代码从(1)开始,函数t()一定要是bool型的,timer1是做延时用的,本来想用sleep,但是整个程序都死,不符合要求.现在我想启动timer1后就进入到timer1_Elapsed,然后再执行(3),也就是说从(2)到(4),(4)执行完后再执行(3),请问要怎么做?
简单说就是在执行private bool t() 得过程中,加入一个延时,延时结束(就是timer1.Enabled == false)后return true
简单说就是在执行private bool t() 得过程中,加入一个延时,延时结束(就是timer1.Enabled == false)后return true
private void s() //(1)
{
if(t())
{...}
}
放到另外一个线程中去执行
再如果一次,如果你用多线程的话推荐使用组件backgroundWorker
1.延时的目的就是为了等待timer1_Elapsed返回一个标志(timer1.Enabled = false),然后好继续执行(3)。
2.开线程是没有必要的,而且不适合
private void s() //(1)
{
if(t())
{...}
} private bool t()
{
System.Timers.Timer timer1 = new System.Timers.Timer(10000);
timer1.AutoReset = true;
timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true; //(2)
while(timer1.Enabled ) //(3)
{
//什么都不执行,就在等timer1.Enabled=false退出循环,然后好return true。
//其实这个循环就是为了等待10秒,在这10秒会有数据自动来,代码太多而且涉及很多类,我就没贴出来,就用
//最后要执行的语句return true来代替了。
}
return true;
} void timer1_Elapsed(object sender, ElapsedEventArgs e) //(4)
{
//只做延时用
timer1.Enabled = false;
} 我想做的是把(3)那个while循环去掉(因为它占资源,我要开很多调用上述代码的线程的),但还能起到延时执行return true的效果。不能用sleep,在延时期间还有很多事要做的。
里的,因为要return true
对backgroundWorker组件讲解很好http://www.cnblogs.com/happy555/archive/2007/11/07/952315.html
你是不是想防止界面像死机一样,是不是想在那个延时里面进行提示,告诉用户目前没有死机,是在执行,需要等待?
函数bool t() 是一定要返回true或false的,如果把3之后的操作放在RunWorkerCompleted事件中,那就没办法保证bool t() 有返回值了啊
一个问题:在执行完DoWork之后程序就直接跳到RunWorkerCompleted了,这样延时的效果并没有体现出来,要怎么做?