0

在为 Windows 8 商店应用程序使用 Bing 地图控件时,在非 UI 线程上创建新的Location 对象会导致异常。

WinRT 信息:应用程序调用了为不同线程编组的接口。

通常这意味着我不正确地尝试从后台线程更新 UI,但事实并非如此,因为这可以通过在空的 Windows 8 商店应用程序项目中放置一个按钮来重现:

<Button Content="Click me" Click="Button_Click"/>

并像这样添加一个事件处理程序:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Task.Run(() =>
    {
        var loc = new Location(1, 1);
    });
}

Location 结构的构造函数真的在 UI 线程上做了什么,还是我在这里遗漏了什么?

4

1 回答 1

3

我没有进入代码来查看 Bing 地图类中发生了什么,但是您不能在 UI 线程之外创建任何 Bing 地图“UI”对象。我认为构造函数只测试它是否在主线程上被调用,如果不是则抛出异常。

这意味着您必须在 UI 线程上实例化您的 Location 对象,还要实例化您的折线、引脚、图层等。

任何将添加到地图控件的元素都必须在 UI 线程中创建。

于 2013-04-24T14:53:13.993 回答