Windows phone 7 无线电总线指示器工作不正常

Windows phone 7 无线电总线指示器工作不正常,windows-phone-7,telerik,Windows Phone 7,Telerik,我正在加载数据时使用radbusyindicator。但它不能正常工作。 下面是代码 public MainPage() { InitializeComponent(); DataContext = App.Model; this.Dispatcher.BeginInvoke(new Action(() => { radbusyIndicator.Is

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

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

        }));

        radbusyIndicator.IsRunning = false;   
    }
如果我这样做的话,会发生什么呢。看起来控制在radbusyIndicator.IsRunning=false之后转到调度程序;被执行。
但我不知道如何禁用它一旦数据加载。尝试了很多方法,但都无法成功。如果您能提供任何帮助,我们将不胜感激。

调度程序回调可能会在事件发生后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线程将在它们工作时被阻塞

如果您的方法是同步的,则需要在另一个线程上执行工作,并使用dispatcher将UI更新发送到UI线程

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

然后在构造函数中:

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

最有可能的
IsRunning=false
将在调用dispatcher方法之前执行(竞争条件…实际上它可能永远不会在最后一行之前执行getInfo和getData)。您需要将
IsRunning=false
放入dispatcher Callback中。如果允许,我不确定,但您是否尝试调用radbusyIndicator.IsRunning=false;在Action()方法下??在SampleData.Data.getData()之后;谢谢你的回复。尝试了你的代码,但它现在不显示指示器。可能它很快就会出现和消失,因为所有的方法现在都在UI线程上,并且你正在用你正在做的工作锁定线程-我将更新答案为什么不在XAML中将RadBusyIndicator的IsBusy属性设置为true,并在检索完数据后将其关闭。
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();