日期:2014-05-17  浏览次数:20759 次

C# 线程等待问题
如下:

winform程序,一个按钮,点击后会启动子线程,子线程执行期间,按钮不可用
 子线程执行期间会有一些结果通过Invoke( new 委托)反馈到窗体中。
然后判断子线程是否结束,如果结束,则 按钮可用

我知道有一种方法可以实现,就是在线程结束的时候,用委托 使 按钮可用。 但这样的问题是:当线程中途停止或其它原因的中端时,按钮得不到恢复。
所以上来问问有没有其它的方法。

实现的要求是,主线程不能卡住(这是肯定的。。)。最好是类似一个消息机制,当线程结束时,发出一个通知(我运行完了,该你了),然后接到这个通知,使按钮可用。


C# code

methodA()
{
  btnA.Enable=false;
  Thread t=new Thread(子线程).start()
  //在这里判断t是否结束,如果结束则 btnA.Enable=true;
}



------解决方案--------------------
线程里用try...finally...
finally里调用委托让按钮恢复
------解决方案--------------------
防止发生异常的话:用try{} finally{},在finally块中实现按钮恢复
------解决方案--------------------
我觉得可以创建一个连续的任务
C# code

Task t1 = new Task(FirstThread);
Task t2=t1.ContinueWith(SecondThread);
t1.Start();