【发布时间】:2017-10-30 23:49:43
【问题描述】:
我有一个代码部分,我从服务器调用一些 XML 数据。有时网络或服务器本身存在错误。所以我需要一些错误处理。 为此,我安装了 AwesomeFonts.WPF 并创建了一个简单的
<StackPanel Name="ErrorPanel" Height="200" Width="300" Visibility="Hidden" Canvas.Top="440" Canvas.Left="810" Panel.ZIndex="9999">
<fa:ImageAwesome Icon="Spinner" Spin="True" Height="100" Width="100" />
<TextBlock Text="data loading..." />
</StackPanel>
这应该显示一个旋转图标的加载动画。现在我想做类似的事情
ErrorPanel.Visibility = Visibility.Visible;
mainPznItem.SubPzns = Communication.GetProductList(tempPznList);
ErrorPanel.Visibility = Visibility.Hidden;
现在我知道了 WPF 的调度问题,并且已经尝试过类似的方法
Application.Current.Dispatcher.Invoke(() => { ErrorPanel.Visibility = Visibility.Visible; });
或类似的东西
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new
ThreadStart(delegate
{
ErrorPanel.Visibility = Visibility.Visible;
}));
在这个上,我确实可以看到面板,但动画停止了。
我想让一个计时器运行,这样我就可以缩短服务器的超时时间。我想做更多类似的事情:
1。显示动画
2。启动计时器
3。调用服务器
4。数到 10
5。如果我直到 10 点才得到答案,则显示错误消息,否则显示结果
6。隐藏等待动画。
有人知道如何实现这一点吗?
【问题讨论】:
-
使您的
GetProductList()异步,最好使用异步网络请求 (HttpClient),其次选择使用 Task.Run()。