我一直在阅读Caliburn在线程编组方面有多棒,以及如何更新UI线程非常容易,但我似乎无法让它工作,也无法找到显示它的示例,所以我需要帮助... < / p>
这是我的XAML ......
<StackPanel Orientation="Vertical" HorizontalAlignment="Left">
<Label Content="Progress For Current File" />
<WrapPanel>
<ProgressBar x:Name="CurrentFileProgress" Width="500" Height="25" Minimum="0" Maximum="1" />
<Label Content="1 of 25" />
</WrapPanel>
</StackPanel>
这是我的ViewModel ...
public void Go()
{
var files = Directory.GetFiles(PathToFiles, "*.sql");
CurrentFileProgress = 0;
for (int iter = 1; iter <= files.Length; iter++)
{
CurrentFileProgress = iter / (files.Length * 1.0f);
System.Threading.Thread.Sleep(250);
}
}
private double _CurrentFileProgress = 3; //For design time look
public double CurrentFileProgress
{
get { return _CurrentFileProgress; }
set
{
_CurrentFileProgress = value;
NotifyOfPropertyChange(() => CurrentFileProgress);
}
}
这很简单,几秒钟后我的进度条为100%,但它并没有像我期望的那样步进。
答案 0 :(得分:2)
我想问题是通过调用Thread.Sleep来阻止UI线程,因此在操作完成之前无法更新UI。 尝试在后台线程上运行该进程(或使用TPL - Tasks)。