在我的程序中,我有一个计时器,当它打到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;
}
答案 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
表示您的设计需要有效。