诸如 执行大批量数据更新的时候,子线程 执行sql操作,主线程上显示更新的进度比如显示已经更新多少条就是主线程和新开线程这之间的交互怎么做合适?现在的法子是,主程序一个timer ,一个label。子线程执行操作后对label赋值,然后timer对其进行访问 来显示

解决方案 »

  1.   

    "执行sql操作"好象不太好控制,因为他没有中途的事件返回。除非你是有n条SQL操作,分步操作。不太建议使用定时器,可以尝试用事件。比如有个类中,有个event事件,而这个类要执行10条sql操作,每条占10%的时间。
    那么每执行一条,触发一下事件。而外部程序订阅这个事件(事件中带有进度等信息),并更新lable.
      

  2.   

    链接:这是我用BackgroundWorker实现的一个示例具体到你的问题,还要看你的SQL操作是如何的。假如是一句句Update的,那么可以在循环体内利用计数反馈进度信息。如果是一个存储过程一次性提交所有更新,那在ADO.NET的这头,没有合适的方法获知数据库那头处理的进度信息。
      

  3.   

    如果简单也可以直接调用函数更新。---“主线程和新开线程这之间的交互怎么做合适?”新线程Update()
    {
        //.....
        ShowProProgress(0);
    }
    delegate void SetTextDelegate(int n);
    private void ShowProProgress(int n)
    {
         if (this.InvokeRequired)
         {
             this.Invoke(new SetTextDelegate(ShowProProgress), new object[] {n});
          }
          else
          {
              this.label1.Text = n.ToString();
          }
    }
      

  4.   

    顶3#,MS已经封闭了一个很好用的控件,稍微改改就可以实现LZ的需求