界面上点“下一步”,执行操作到数据库要1分钟,这个阶段界面冻结很难看,怎么用多线程加个进度条改善?有个难点,异步执行操作到数据库,过程要在进度条显示进度,percent怎么计算?另外,我要获得异步“执行操作到数据库”的结果,成功还是失败,弹出相应提示信息。请高手指点

解决方案 »

  1.   

    用BackGroundWorker , 不要在UI thread上,否则UI就停住了。 
    Percent 也有。仔细看MSDN
      

  2.   

    还有一个办法,你可以在处理数据的时候另外开启一个线程 ,让他自己去处理,处理完成后返回到主线程,这个过程中你可以安排窗口做别的事青,不过要注意一个问题,就是同步,不要让另外那个线程和主线程使用同一个 static connection,否则会发生异常,最好使用连接池。
      

  3.   

    增加一个线程,用异步委托调用
    如果是多个sql语句,可以显示进度,如果是一个sql语句要执行很久,进度不好显示
      

  4.   

    增加一个线程,去取数据
    执行完了再显示Invoke到界面上.
      

  5.   

    连接池,你可以参照一下ADO。net2.0中的连接池的例子
      

  6.   

    先是进度条的问题可以解决,新开一个线程执行Sql,进度条使用你预估计的时间设置,就像Windows的安装
      

  7.   

    不用知道Sql执行需要的真实时间,只是给用户一个好看的界面而已吧
      

  8.   

    可专门做个进度条的界面,用个线程来执行弹出这个界面。
    不过最好是不用进度条,就用个gif“请等待...”图片
      

  9.   

    tjvictor(终于升星了,向两星奋斗) ( ) 信誉:100    Blog  2007-03-28 10:47:00  得分: 0  
     
     
       没有办法使用时间精确。微软的很多产品在安装时,本来还有10分钟才完成,可是一下子就剩下几十秒了,所以呀,这种时间只可以大致估算一下。
      
     
    ----------------------------------------------------
    up
      

  10.   

    有代码么?现在
    buttonNext_Click()
    {
        bool result = MyCommitToDBFunction(string input); //这个方法很慢
        if(result) MessageBox.Show("Succeeded.");
        else MessageBox.Show("Failed!");
    }怎么用BackGroundWorker或者Delegate来实现?
      

  11.   

    用专门的进度条也不能很精确,还是用gif之类的图片吧。等完成再去捍图片就可以了
      

  12.   

    典型的异步多线程,
    可以使用observer做回调。
    percetage,可以开始之后等待回调
      

  13.   

    看一下委托实现多线程,即Invoke()和BeginInvoke这2个方法