0

我有一个 Windows 8 应用程序,并希望每 15 秒查询一次资源以获取状态更改(进入 web 服务 url),结果应写入绑定到 UI (XAML) 的 ViewModel 属性。

如果我们离开页面,任务应该终止。

我已经查看了后台任务,但对于这个特定于页面的任务来说,它们似乎有点过头了。

还玩过 Task.Run() 和 Dispatcher,但我无法让它与 while 循环一起工作。

有任何想法吗?

4

2 回答 2

1

如果您想每 x 秒执行一次操作,那么您应该使用计时器。由于您想在 WinRT UI 线程上运行它,因此正确的是Windows.UI.Xaml.DispatcherTimer.

当您离开页面时,您应该Stop()设置计时器,以便Tick停止引发其事件。

如果你想await在事件处理程序中做一些事情,你需要做它async,例如:

timer.Tick += async (s, e) =>
{
    var client = new HttpClient();
    var response = await client.GetAsync(…);
    …
}

这将创建一个async void方法。请注意,您几乎不应该这样做,除非您正在编写事件处理程序。

于 2013-02-11T15:16:52.070 回答
0

您需要使用 UI 线程的Dispatcher。您可以将其保存到静态成员中以从任何地方获取它,或者您可以直接从活动 UI 中即时获取它。但是在您拥有Dispatcher之后,您可以调用(并等待)RunAsync方法。

await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
    new CoreDispatcherPriority(), action);

作为操作,您可以使用例如 lambda 表达式或您想要的任何其他预定义操作。在此操作中,您可以操作 UI 绑定元素。我希望它可以帮助你。

于 2013-02-11T13:54:15.573 回答