调度程序回调可能 100% 的情况下会在
radbusyIndicator.IsRunning = false
线。
请尝试以下操作:
public MainPage()
{
InitializeComponent();
DataContext = App.Model;
this.Dispatcher.BeginInvoke(new Action(() =>
{
radbusyIndicator.IsRunning = true;
SampleData.Data.getInfo();
SampleData.Data.getData();
radbusyIndicator.IsRunning = false;
}));
}
这是因为编组对 UI 线程的调用的行为需要一些 CPU 周期,而原来radbusyIndicator.IsRunning = false
的几乎是下一行要运行的。
无论如何都没有关系,因为您要么会得到一个短暂的忙碌指示器闪烁,要么它会永远留在屏幕上,因为你在工作完成后不隐藏它,你会立即隐藏它
编辑:
是的,忽略最后一个 - 意识到它不起作用:
如果方法是异步的,指示器将立即隐藏,如果它们不是异步的,UI 线程将在它们工作时被阻塞
如果您的方法是同步的,您需要在另一个线程上完成工作,并使用调度程序将 UI 更新编组到 UI 线程
您可以使用BackgroundWorker
在另一个线程上工作:
http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx
BackgroundWorker bw = new BackgroundWorker();
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
radbusyIndicator.IsRunning = true;
}));
SampleData.Data.getInfo();
SampleData.Data.getData();
this.Dispatcher.BeginInvoke(new Action(() =>
{
radbusyIndicator.IsRunning = false;
}));
}
然后在你的构造函数中:
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();