代码之家  ›  专栏  ›  技术社区  ›  KateMak

有没有什么方法可以在不使用后台线程的情况下更新进度条?

  •  2
  • KateMak  · 技术社区  · 12 年前

    我有一个在按钮点击事件中发生的长计算,每次迭代后,我都希望进度条更新。我想知道是否有任何方法可以在不使用后台线程的情况下做到这一点:

    private void btnGetData_Click(object sender, RoutedEventArgs e)
    {
                progressBarGetData.Minimum = 0;
                progressBarGetData.Maximum = recordCount;
                progressBarGetData.Value = 0;
    
                while(long iteration going on)
                {
                    //do work
                    progressBarGetData.Value += 1;
                }
     }//end button click
    

    屏幕上的进度条不会缓慢增加。我必须使用后台工作人员吗?

    非常感谢。

    1 回复  |  直到 12 年前
        1
  •  6
  •   Jon Skeet    12 年前

    主要问题不是进度条,而是在UI线程中执行长时间运行的同步操作。这将冻结整个用户界面,给用户带来糟糕的体验。

    如果您可以将循环转换为使用异步调用(例如,如果它只是因为与web服务或数据库通信而长时间运行),那么这是一个选项 在.NET 4.5中更容易。

    否则,你 需要一个单独的线程-显式启动或使用 BackgroundWorker .