Drizzle

博客园 首页 新随笔 联系 订阅 管理
方法1:我不喜欢
启动异步操作,使用 RunWorkerAsync 方法。
RunWorkerAsync 采用一个可选的 object 参数,可以使用该参数将变量传递给辅助方法。BackgroundWorker 类公开 DoWork 事件,您的辅助线程通过 DoWork 事件处理程序附加到该事件。

DoWork 事件处理程序采用一个 DoWorkEventArgs 参数,该参数具有 Argument 属性。此属性接收来自 RunWorkerAsync 的参数,并可以传递至 DoWork 事件处理程序中调用的辅助方法。


RunWorkerCompleted事件在后台线程执行完毕后有主线程调用。可在该事件处理程序中执行界面的更新操作。

方法2:我喜欢
在跨线程更新窗体的成员方法中应用如下结构:
为改造前:
public   void UpdateControl(int x,inty)
{
      some code...
}

改造后:
delegate void UpdateControlCallback (int x,int y);
public void UpdataControl(int x,int y)
{
   if(this.InvokeRequired)
      { UpdataControlCallback d = new UpdataControlCallback(UpdataControl);
         this.Invoke(d,new object[]{x,y});
      }
   else
      {
         some code...
      }
 }

posted on 2006-11-28 12:01  岁月随风  阅读(389)  评论(0编辑  收藏  举报