调用数据库时ProgressBar不会更新

时间:2013-02-05 13:56:28

标签: c# .net wpf

我遇到了进度条的问题,因为在加载数据之前它没有显示。

我不确定我的代码是对还是错。请帮助解决这个问题并解决这个问题。任何建议对我来说真的很有帮助..

progressBar1.Minimum = 0;
progressBar1.Maximum = short.MaxValue;
progressBar1.Value = 0;

double value = 0;

UpdateProgressBarDelegate updatePbDelegate = new UpdateProgressBarDelegate(progressBar1.SetValue);

foreach (CDType ctp in dgAttributes.ItemsSource)
{
    if (ctp.IsSelected == true)
    {
        //Mouse.OverrideCursor = Cursors.Wait;
        var CDTypeID = ctp.TYPE_ID;

        label3.Content = "Loading.." + CDTypeID;

        SqlCommand sqlCommand = new SqlCommand(conn.ConnectionString);
        sqlCommand.CommandType = CommandType.StoredProcedure;
        sqlCommand.CommandText = "LOAD_DATA_SOURCE_SAVE";

        sqlCommand.Parameters.AddWithValue("CDTYPE_ID", CDTypeID);

        sqlConnection.Open();
        sqlCommand.Connection = sqlConnection;

        do
        {
            value += 1;
            Dispatcher.Invoke(updatePbDelegate,
                              System.Windows.Threading.DispatcherPriority.Background,
                              new object[] { ProgressBar.ValueProperty, value });                                          
            //i'm not sure whether its correct way or not to give below line here..? I mean execute non query...since it was looping all the time untill its reaches Maximum value
            //sqlCommand.ExecuteNonQuery();
        }
        while (progressBar1.Value != progressBar1.Maximum);

        sqlConnection.Close();
        //label3.Content = "Sucessfully Loaded..!";
    }
}

1 个答案:

答案 0 :(得分:1)

只要您无法确定需要多长时间,您可能希望使用其样式设置为不确定的进度条。

<ProgressBar IsIndeterminate="True" />

如果您使用UI线程加载数据,则Progressbar可能无法更新,因为线程正忙。有关如何使用后台工作程序加载数据的信息,请参阅this post。您也可以在StackOverflow上搜索;关于背景工作者有很多问题。

如果数据库批量传回数据,您可能能够跟踪其路上的批次数并使用具有实际值的进度条。