Как показать индикатор занятости Silverlight Toolkit во время расчета? - PullRequest
3 голосов
/ 17 июля 2011

У меня возникли некоторые проблемы с реализацией элемента управления, который показывает индикатор занятости, вот сценарий: у меня есть простое представление с индикатором занятости и TextBlock, это привязка к ViewModel (что-то вроде следующего).

public class ViewModel
{
    private bool _isbusy;
    public bool IsBusy
    {
        get { return _isbusy; }
        set
        {
            _isbusy=value;
            OnPropertyChanged("IsBusy");
        }
    }

    private string _text;
    public string Text
    {
        get { return _text; }
        set
        {
            _text = value;
            OnPropertyChanged("Text");
        }
    }

    public void CallMe()
    {
        IsBusy = true;
        Text = Static.PerformCalculation();
        IsBusy = false;
    }
}

Пока все довольно просто, нет ??Проблема в том, когда у меня есть метод, как CallMe ().Я должен показать и скрыть индикатор занятости, пока выполняются вычисления, я думаю, что причина была в том, что вычисления и уведомления свойства IsBusy выполнялись в одном потоке, поэтому я получил что-то вроде этого:

public void CallMe()
{
    IsBusy = true;
    Static.PerformCalculationAsync(CalculationCallback);
}

private void CalculationCallback(string result)
{
    Text = result;
    IsBusy = false;
}

Теперь происходит что-то другое, индикатор занятости загружается нормально, но когда вычисление слишком короткое, BusyIndicator не отображается, и между вызываемым методом CallMe () и текстом на экране появляется небольшая задержка. Это моя проблема, я хочу, чтобы свойство Text вычислялось (и показывалось на экране) до того, как BusyIndicator будет скрыт.

Кто-нибудь знает хороший способ сделать этоили есть какой-нибудь совет, которому я могу следовать ??

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Я также сталкивался с подобной проблемой, когда индикатор занятости показывался вечно, и похоже, что проблема решена установкой DisplayAfter в «0».

Шаг 1. Отображение индикатора занятости и затем вызов функции javascript:

BusyIndicator.IsBusy = true;
HtmlPage.Window.Invoke("foo", id);  

Шаг 2. Функция Javascript отправляет сообщение назадпосле завершения отправки сообщения вызывается функция Silverlight для закрытия индикатора занятости путем установки:

BusyIndicator.IsBusy = false;

Проблема: функция javascript вызывает функцию silverlight для закрытия индикатора занятости перед индикатором занятостидействительно отображается в интерфейсе пользователя (хотя мы установили IsBusy в true перед вызовом javascript).

Решение: Я заметил, что значение DisplayAfter было установлено на 00.00.00.1 вxaml и я изменили на

BusyIndicator.DisplayAfter = TimeSpan.Zero

в коде позади.Это решило мою проблему.Но я хочу проверить, является ли HtmlPage.Window.Invoke синхронным или асинхронным вызовом?

Спасибо за ваш ввод

1 голос
/ 18 июля 2011

Требуется busyindicator контроль

DisplayAfter="0"
...