如何将WPFtoolkit busyindicator用于WPF应用程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将WPFtoolkit busyindicator用于WPF应用程序相关的知识,希望对你有一定的参考价值。

我在WPF中创建了一个应用程序,我正在进行长时间的转换过程。所以我想放进度栏窗口,所以我使用了来自wpftoolkit dll的BusyIndi​​cator进度条并试图显示我的转换何时开始。但当我点击转换按钮时,它显示异常 - “调用线程无法访问此对象,因为另一个线程拥有它”...

我的代码 -

private void ConvertBtn_OnClick(object sender, RoutedEventArgs e)
{     
  Task.Factory.StartNew(() =>
  {
    ConversionToExcel();//My conversion methode
    for (int i = 0; i < 10; i++)
    {
      Dispatcher.Invoke(DispatcherPriority.Normal, new Action(
        () => { ProgressIndicator.BusyContent = string.Format("Inprogress, please wait..."); }
      ));
      Thread.Sleep(1000);
    }
  }).ContinueWith((task) => { ProgressIndicator.IsBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext()
  );
}
答案

在开始新线程之前设置IsBusy=true

private void ConvertBtn_OnClick(object sender, RoutedEventArgs e)
{    
  ProgressIndicator.BusyContent = string.Format("Inprogress, please wait..."); 
  Task.Factory.StartNew(() =>
  {
    ConversionToExcel();//My conversion method

  }).ContinueWith((task) => { ProgressIndicator.IsBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext()
  );
}

此外,我认为您应该拥有自己的IsBusy属性并将其绑定到XAML中的ProgressIndicator.IsBusy。

以上是关于如何将WPFtoolkit busyindicator用于WPF应用程序的主要内容,如果未能解决你的问题,请参考以下文章

WPFToolkit DataGrid:组合框列不会立即更新 selectedvaluebinding

添加新参考后如何查看工具箱中的组件?

WPF Toolkit:如何滚动数据网格以显示后面代码中的选定项目?

慢速渲染WPF图表

将 CheckListBox 绑定到 ViewModel

WPF 开源项目