0

我正在尝试异步加载数据,但第一次没有显示进度条,就像 UI 线程忙于调用 BackgroundWork 并且不呈现控件一样。我做错了什么?

这是异步代码,灵感来自这个问题windows phone 7 progress bar for a listbox loading data

private void Embarques_Loaded(object sender, RoutedEventArgs e)
{

    progressBar.Visibility = System.Windows.Visibility.Visible;

    BackgroundWorker bw = new BackgroundWorker();

    bw.RunWorkerCompleted += (s, ea) =>
        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            progressBar.Visibility = System.Windows.Visibility.Collapsed;
            txtUltimaAtualizacao.Text = DateTime.Now.ToString();
        });

    bw.DoWork += (s, ea) =>
        Deployment.Current.Dispatcher.BeginInvoke(CarregaItens);

    bw.RunWorkerAsync();
}
4

1 回答 1

3

假设CarregaItens()是你的加载过程,你不应该调用Deployment.Current.Dispatcher.BeginInvoke它,因为它只是将它从后台线程提升到 UI 线程,从而在它运行时冻结你的应用程序。只需致电:

bw.DoWork += (s, ea) => CarregaItens();

于 2012-06-21T00:46:11.177 回答