我的 WPF 用户控件上有一个 BackgroundWorker。
        private readonly BackgroundWorker worker = new BackgroundWorker();
        public ucCustomer()
        {
          InitializeComponent();
          worker.DoWork += worker_DoWork;
          worker.RunWorkerCompleted += worker_RunWorkerCompleted;
        }
        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            // run all background tasks here
            System.Threading.Thread.Sleep(10000);
        }
        private void worker_RunWorkerCompleted(object sender,  RunWorkerCompletedEventArgs e)
        {
            //update ui once worker complete his work
        }
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            worker.RunWorkerAsync();
        }
上面的代码是工作,当任务工作时 UI 是响应,但是如果我将 worker_DoWork() 更改为
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
    // run all background tasks here
   Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, 
        new Action(() => {
        gridDataBind(); //A long data-mining task,using Dispatcher.Invoke() to access UI.
    }));
} 
private void gridDataBind()
{
    SnEntities sn = new SnEntities();
    var customers = from c in sn.Customer select c;
    dgCustomer.ItemsSource = customers.ToList();
}
UI 会冻结,直到任务结束。
有什么解决办法吗?谢谢。