【发布时间】:2014-03-15 04:04:09
【问题描述】:
简而言之,我想显示进度指示器,进行 REST 服务调用,然后隐藏指示器。
我的进度指示器绑定到一个属性,当设置为真或假时,显示或隐藏它。我的指示器是一个小旋转轮,当我调用 Web 服务时,我显然不希望我的 UI 挂起,所以这是通过调用 Async 函数来完成的。
我之前发现了一些代码,可以很好地实现我想做的事情,但是有一个但是!
这是我正在使用的简化版本代码:
try
{
ThreadPool.QueueUserWorkItem(async data =>
{
var dispatcher = Deployment.Current.Dispatcher;
dispatcher.BeginInvoke(() =>
{
this.IsRunning = true;
});
configModel = LoginUser(loginId, password);
dispatcher.BeginInvoke(() =>
{
this.IsRunning = false;
});
});
}
catch (Exception ex)
{
IDialogService dialogService = this.GetService<IDialogService>();
dialogService.Show("Unhandled Exception", ex.Message);
dialogService = null;
}
当我的 Web 服务由于某种原因失败(例如被防火墙阻止)时,就会出现问题。即使我有一个 try catch,它也不会被捕获并导致我的应用程序崩溃。
有没有其他方法可以在不使用线程池的情况下实现这一点?实现这一目标的最干净的方法是什么?
我确实需要调用 this.IsRunning,因为它会在显示和隐藏我的进度指示器后进行处理,但这显然需要在 UI 线程上运行,而其余调用需要在另一个线程上运行。
【问题讨论】:
标签: c# windows-phone-8 task-parallel-library async-await