使用Caliburn Micro更新进度条

时间:2011-10-22 17:20:45

标签: multithreading progress-bar caliburn.micro

我一直在阅读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%,但它并没有像我期望的那样步进。

1 个答案:

答案 0 :(得分:2)

我想问题是通过调用Thread.Sleep来阻止UI线程,因此在操作完成之前无法更新UI。 尝试在后台线程上运行该进程(或使用TPL - Tasks)。