WPF/XAML/C# 我将进度条的可见性设置为可见,然后在长时间运行后隐藏。我正在尝试使用 Task.Factory.StartNew 和 ContinueWith 来完成此操作。这部分工作正常,但出于某种原因,我的数据绑定到命令的导航按钮不会更新,直到我在漫长的过程之后实际单击屏幕。如果我省略 task.factory.startnew,按钮会正确更新(但我从未看到进度条)。我该如何解决?以下示例代码显示了 UI 中未更新的过程和按钮的问题:
private void DoWorkCommandExecuted()
{
//Do stuff
ShowProgress = Visibility.Visible;
Task.Factory.StartNew(() =>
{
//Thread.Sleep(3000);
for (int i = 0; i < 10000; i++)
{
s += i.ToString();
}
ObservableCollection<string> temp = new ObservableCollection<string>();
temp.Add("One");
temp.Add("Two");
temp.Add("Three");
temp.Add("Four");
temp.Add("Five");
BillingCycles = temp;
SelectedBillingCycle = BillingCycles[0];
})
.ContinueWith(t =>
{
ShowProgress = Visibility.Hidden;
});
}
以及控制它启用的按钮代码的属性示例:
private bool CanFirst
{
get
{
bool b = false;
if (BillingCycles != null)
{
if (BillingCycles.Count > 0 && SelectedBillingCycle != BillingCycles[BillingCycles.Count - 1])
{
b = true;
}
}
return b;
}
}
我正在使用 INotifyPropertyChanged。这是一个非常基本的示例,说明了我的问题,这是一个更复杂的程序。“转到第一个”或“转到最后一个”按钮应根据所选择的 BillingCycle 启用/禁用。如果我不包含要在线程中运行的代码,则按钮将正确启用/禁用(我只是在进程发生时看不到进度条)。