0

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

似乎我的进度环直到它被设置为活动的功能结束时才被“激活”。但由于我正在等待连接功能的完成,进度环永远不会出现。

我尝试了各种不同的方法来解决这个问题,但我缺乏对等待/任务/调度的理解来完成这项工作。

这是与 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;
}
4

1 回答 1

2

我相信您想要的是async在您的虚拟机上公开一个方法,例如:

public async Task ConnectAsync();

然后您可以像这样使用它:

vm.IsConnecting = true;

await vm.ConnectAsync();

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

vm.IsConnecting = false;

作为一般规则,任何使用Dispatcher都表明您的设计需要工作。

于 2013-11-06T20:15:50.130 回答