我也尝试过 BackgroundWorker 概念加载动画在这里工作,但它不允许加载用户控件并给出错误。
这是设计使然,您不能在后台线程中触摸 UI 端的任何内容,因为它不是 STA。相反,将进度指示器绑定到线程可以修改的属性,然后进度指示器将通过 INotifyPropertyChanged 事件获取更新。
例如,如果您有ProgressBar
绑定到ProgressPercentage
或绑定到 的不确定忙碌指示符IsBusy
:
在XAML
:
<ProgressBar x:Name="StatusBar"
Maximum="1" Value="{Binding ProgressPercentage}" />
在Code
:
using (var backgroundWorker = new BackgroundWorker())
{
backgroundWorker.DoWork += (s, ex) =>
{
IsBusy = true;
StatusText = "Pretending to do something...";
for (int i = 0; i < 100; i++)
{
ProgressPercentage = (i + 1)/100.0D;
Thread.Sleep(100);
}
};
backgroundWorker.RunWorkerCompleted += (s, ex) =>
{
IsBusy = false;
StatusText = "Export Complete.";
};
backgroundWorker.RunWorkerAsync();
}
后台线程将完成其工作,UI 线程在等待时不会阻塞,并且您的进度指示器将随着它的进行而更新。