连接时显示ProgressRing

时间:2013-11-06 20:02:53

标签: c# xaml windows-runtime winrt-xaml

在我的程序中,我有一个计时器,当它打到0时,我希望我的应用程序“连接”到服务,当它“连接”时,让它显示进度环。

似乎我的进度环在它被设置为活动的函数结束之前不会被“激活”。但由于我正在等待Connect功能的完成,因此进度环永远不会出现。

我已经尝试了各种不同的方法来解决这个问题,但是我缺乏对awaits / tasks / Dispatching的理解来使这项工作。

以下是与ProgressRing和Connect功能有关的代码:

vm.IsConnecting = true;

await Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => vm.Connect());

if (vm.ConnectionClear)
    this.Frame.Navigate(typeof(MainPage), vm);

vm.IsConnecting = false;

vm.IsConnecting是ProgressRing的IsActive属性所绑定的。

如何在vm.IsConnecting设置为true后立即显示progressRing?

应该注意的是,我的目标是WinRT,因此我的工具箱有限。

关于这一点的奇怪之处在于,我在EventHandler中拥有与上面相同的代码块,用于单击按钮,它的工作方式与我认为的相同。也就是说,单击该按钮时,将显示ProgressRing,程序将执行connect方法,完成后,ProgressRing将消失。

private async void Connect_Clicked(object sender, RoutedEventArgs e)
{
    vm.IsConnecting = true;

    await Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => vm.Connect());

    if (vm.ConnectionClear)
        this.Frame.Navigate(typeof(MainPage), vm);

    vm.IsConnecting = false;
}

1 个答案:

答案 0 :(得分:2)

我相信你想要的是在你的VM上公开async方法,如下:

public async Task ConnectAsync();

然后您可以像这样使用:

vm.IsConnecting = true;

await vm.ConnectAsync();

if (vm.ConnectionClear)
    this.Frame.Navigate(typeof(MainPage), vm);

vm.IsConnecting = false;

作为一般规则,使用Dispatcher表示您的设计需要有效。