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

Posted

技术标签:

【中文标题】如何在计算过程中显示 Silverlight Toolkit Busy Indicator?【英文标题】:How to show Silverlight Toolkit Busy Indicator during calculation? 【发布时间】:2011-10-07 00:19:41 【问题描述】:

我在实现一个显示忙碌指示器的控件时遇到了一些问题,以下是场景:我有一个带有忙碌指示器和 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;

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

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

【问题讨论】:

只是为了确定:在您的busyindicator控件上您设置了以下内容? DisplayAfter="0" 不敢相信我错过了,谢谢它解决了我的问题:) @emp:即使答案很短,它仍然是一个答案。请使用答案框而不是使用评论添加答案。然后它会允许问题出现在问题列表中,因为它有答案,现在可能标记为已回答,从而节省其他人阅读问题的时间和麻烦,以期回答只是发现实际上它已经完成并撒满灰尘。 【参考方案1】:

busyindicator 控件需要

DisplayAfter="0"

【讨论】:

【参考方案2】:

我也遇到过类似的问题,有时会一直显示忙碌指示符,看起来问题已通过将DisplayAfter 设置为“0”得到解决。

步骤 1. 显示忙碌指示符,然后调用 javascript 函数:

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

第 2 步。 Javascript 函数进行回发,一旦回发完成,它会调用 Silverlight 函数通过设置关闭忙碌指示器:

BusyIndicator.IsBusy = false;

问题: javascript 函数调用silverlight 函数以在忙碌指示器真正显示在UI 上之前关闭忙碌指示器(尽管我们在调用javascript 之前已将IsBusy 设置为true)。

解决方案:我观察到 DisplayAfter 值在 xaml 中设置为 00.00.00.1,我已更改为

BusyIndicator.DisplayAfter = TimeSpan.Zero

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

感谢您的意见

【讨论】:

以上是关于如何在计算过程中显示 Silverlight Toolkit Busy Indicator?的主要内容,如果未能解决你的问题,请参考以下文章

将站点添加到Silverlight权限选项卡

如何在 Silverlight 中使用 DataTemplate 显示单个项目?

Silverlight 4:如何在键盘焦点上显示工具提示(修订)

如何在 Web 浏览器中从 Silverlight 应用程序捕获图像

如何让一个现有的程序集运行在Silverlight环境中

如何在 Silverlight 中的 TextBox 上方定位菜单栏?