Обновление индикатора выполнения с помощью Caliburn Micro - PullRequest
1 голос
/ 22 октября 2011

Я продолжаю читать, насколько Caliburn хорош в маршалинге потоков и как невероятно легко обновить поток пользовательского интерфейса, но я не могу заставить его работать, и не могу найти пример, который показывает это, поэтому мне нужна помощь ...

Вот мой 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 Ответ

2 голосов
/ 24 октября 2011

Полагаю, проблема в том, что, вызывая Thread.Sleep, вы блокируете поток пользовательского интерфейса, поэтому пользовательский интерфейс не может быть обновлен, пока действие не будет завершено.Попробуйте запустить процесс в фоновом потоке (или используйте TPL - Задачи).

...