如何在计算过程中显示Silverlight Toolkit Busy Indicator?

时间:2011-07-17 05:08:52

标签: silverlight silverlight-toolkit busyindicator

我在实现显示Busy指示符的控件时遇到一些问题,这里是场景:我有一个带有忙指示符和TextBlock的简单View,它绑定到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;
}

现在发生了一些不同的事情,Busy Indicator加载很好,但是当计算太短时,没有显示BusyIndi​​cator,并且调用的CallMe()方法和屏幕上出现Text之间有一个小的延迟。 这是我的问题,我希望在BusyIndi​​cator被隐藏之前计算(并显示在屏幕上)Text属性。

有没有人知道这样做的好方法,或者有任何我可以遵循的建议?

2 个答案:

答案 0 :(得分:1)

busyindicator控件需要

DisplayAfter="0"

答案 1 :(得分:1)

我也遇到了类似的问题,繁忙的指标有时会永远显示出来,看起来问题是通过将DisplayAfter设置为“0”来解决的。

第1步。显示忙碌指示符然后调用javascript函数:

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

第2步。 Javascript函数执行回发,回发完成后,通过设置调用Silverlight函数关闭忙指示符:

BusyIndicator.IsBusy = false;

问题: javascript函数调用silverlight函数来关闭忙指示符,然后在UI上显示忙指示符(尽管我们在调用javascript之前已将IsBusy设置为true)。 / p>

解决方案:我发现xaml中的DisplayAfter值设置为00.00.00.1而我已更改为

BusyIndicator.DisplayAfter = TimeSpan.Zero
代码背后的

。这解决了我的问题。但我想检查HtmlPage.Window.Invoke是同步调用还是异步调用?

感谢您的投入