我正在创建一个小型通用Windows应用程序。我想使用MapControl来呈现从Internet下载的一些数据。这些数据每分钟刷新一次,我希望每次发生时都更新MapIcons的位置。 所以......加载地图后,我创建一个每60秒运行一次的Timer,使用HttpWebRequest下载数据,然后解析收到的JSON,然后更新MapControl中显示的MapIcons的位置。
一切都应该可以正常工作,但是当我在Timer回调中调用新的MapIcon()时,我有一个例外:
newproject.exe中发生了'System.Exception'类型的异常,但未在用户代码中处理
附加信息:该应用程序称为为不同线程编组的接口。 (来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))
我的定时器回调代码是:
func1()
答案 0 :(得分:1)
请尝试使用Dispatcher。您需要在UI线程上添加MapIcon对象。
private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
// Your Code
});
}
答案 1 :(得分:0)
虽然Jean-Sébastien Dupuy's answer在技术上是正确的,但另一种选择是使用HttpClient
而不是HttpWebRequest
并使用await
关键字来确保所有内容都在正确的线程上自动运行。 (还要确保你使用的是DispatcherTimer
而不是其他类型的计时器。