radbusyindicator工作不正常

时间:2013-04-21 09:26:01

标签: windows-phone-7 telerik

我正在加载数据时使用radbusyindicator。但它不能正常工作。 以下是代码

      public MainPage()
       {
          InitializeComponent();
          DataContext = App.Model;   
          this.Dispatcher.BeginInvoke(new Action(() =>
            {
            radbusyIndicator.IsRunning = true;
            SampleData.Data.getInfo();
            SampleData.Data.getData();

        }));

        radbusyIndicator.IsRunning = false;   
    }

如果我这样做会发生什么,指标会一直运行。看起来控件在radbusyIndi​​cator.IsRunning = false之后转到调度程序;被执行。 但是我不知道如何在加载数据后禁用它。尝试了很多方法,但无法使其发挥作用。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

调度程序回调可能会在100%的情况下触发

radbusyIndicator.IsRunning = false

线。

请尝试以下方法:

public MainPage()
{
    InitializeComponent();
    DataContext = App.Model;   
    this.Dispatcher.BeginInvoke(new Action(() =>
    {
        radbusyIndicator.IsRunning = true;
        SampleData.Data.getInfo();
        SampleData.Data.getData();
        radbusyIndicator.IsRunning = false;   
    }));
}

这是因为编组调用UI线程的行为需要一些CPU周期,原始的radbusyIndicator.IsRunning = false几乎是下一行的运行。

无论如何,无论如何,你要么得到一个忙碌指示器的短暂闪烁,要么它将永远保留在屏幕上,因为在工作完成后你不会隐藏你马上把它藏起来

编辑:

是的,忽略了最后一个 - 意识到它不会起作用:

如果方法是异步的,指示器会立即隐藏,如果它们不是异步的,UI线程将在它们工作时被阻止

如果您的方法是同步的,则需要在另一个线程上进行工作,并使用调度程序对UI线程进行UI更新

您可以使用BackgroundWorker在另一个线程上工作:

http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx

BackgroundWorker bw = new BackgroundWorker();

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    this.Dispatcher.BeginInvoke(new Action(() =>
    {
        radbusyIndicator.IsRunning = true;
    }));

    SampleData.Data.getInfo();
    SampleData.Data.getData();

    this.Dispatcher.BeginInvoke(new Action(() =>
    {
        radbusyIndicator.IsRunning = false;   
    }));
}

然后在你的构造函数中:

bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();