UWP地图控件在缩放后崩溃

6

我创建了一个简单的UWP应用程序,没有编写任何代码,只是XAML。

    <Grid>
        <maps:MapControl/>
    </Grid>

如果我缩放到美国州级别左右,应用程序将崩溃并出现未处理的异常。
事件查看器应用程序日志显示:
Faulting module name: ucrtbase.dll, version: 10.0.19041.546, time stamp: 0x43cbc11d
Exception code: 0xc0000409

我正在运行 Windows 10 版本 20H2 (OS 构建版本 19042.630)。

我该如何修复或进一步诊断此崩溃?

更新1

我能够在崩溃发生时捕获调用堆栈:

    ucrtbase.dll!abort()    Unknown
    ucrtbase.dll!terminate()    Unknown
    ucrtbase.dll!__crt_state_management::wrapped_invoke<void (*)(void),void>(void (*)(void))    Unknown
    BingMaps.dll!MapControl::DetailTextureSource::beginGetTexture(class MapControl::TileFrameKey const &,class std::shared_ptr<class Pal::AsyncOperationImplementation<class MapControl::Versioned<class std::shared_ptr<class Engine::Texture> >,class std::shared_ptr<class Pal::UntypedAsyncOperation> > > const &,class std::shared_ptr<class MapControl::TileImage>,class Math::TileId const &)    Unknown
    BingMaps.dll!MapControl::DetailTextureSource::childOperationCompleted(class MapControl::TileFrameKey const &,class std::shared_ptr<class Pal::AsyncOperationImplementation<class MapControl::Versioned<class std::shared_ptr<class Engine::Texture> >,class std::shared_ptr<class Pal::UntypedAsyncOperation> > >,class Math::TileId,class Pal::AsyncOperation<class std::shared_ptr<class MapControl::TileImage> > const &)    Unknown
    BingMaps.dll!std::_Func_impl_no_alloc<class std::_Binder<struct std::_Unforced,void ( MapControl::DetailTextureSource::*)(class MapControl::TileFrameKey const &,class std::shared_ptr<class Pal::AsyncOperationImplementation<class MapControl::Versioned<class std::shared_ptr<class Engine::Texture> >,class std::shared_ptr<class Pal::UntypedAsyncOperation> > >,class Math::TileId,class Pal::AsyncOperation<class std::shared_ptr<class MapControl::TileImage> > const &),class MapControl::DetailTextureSource *,class MapControl::TileFrameKey const &,class std::shared_ptr<class Pal::AsyncOperationImplementation<class MapControl::Versioned<class std::shared_ptr<class Engine::Texture> >,class std::shared_ptr<class Pal::UntypedAsyncOperation> > > &,class Math::TileId const &,struct std::_Ph<1> const &>,void,class Pal::AsyncOperation<class std::shared_ptr<class MapControl::TileImage> > &>::_Do_call(class Pal::AsyncOperation<class std::shared_ptr<class MapControl::TileImage> > &)    Unknown
    BingMaps.dll!Pal::AsyncOperation<struct Core::DummyType>::callbackFromBaseClass(void)   Unknown
    BingMaps.dll!Pal::UntypedAsyncOperation::tryComplete(class Core::StatusCode)    Unknown
    BingMaps.dll!Pal::UntypedAsyncOperation::setSucceededOrFailedInternal(class Core::StatusCode)   Unknown
    BingMaps.dll!MapControl::PipelineAsyncSource<class std::shared_ptr<class MapControl::TileImage>,class std::shared_ptr<class Pal::AsyncOperation<class MapControl::DownloadedResource> > >::process(class MapControl::TileFrameKey const &,class std::shared_ptr<class Pal::AsyncOperationImplementation<class std::shared_ptr<class MapControl::TileImage>,struct std::pair<class std::shared_ptr<class Pal::AsyncOperation<class MapControl::DownloadedResource> >,class std::shared_ptr<class Utility::PrioritizableTask> > > > const &,class std::shared_ptr<class Pal::UntypedAsyncOperationCancelList> const &)    Unknown
    BingMaps.dll!std::_Func_impl_no_alloc<class std::_Binder<struct std::_Unforced,void ( MapControl::PipelineAsyncSource<class MapControl::Versioned<class std::shared_ptr<class MapControl::GenericMesh<struct Engine::xyzFloat3uvShort2stShort2> > >,class std::shared_ptr<class Pal::AsyncOperation<class MapControl::DownloadedResource> > >::*)(class MapControl::TileFrameKey const &,class std::shared_ptr<class Pal::AsyncOperationImplementation<class MapControl::Versioned<class std::shared_ptr<class MapControl::GenericMesh<struct Engine::xyzFloat3uvShort2stShort2> > >,struct std::pair<class std::shared_ptr<class Pal::AsyncOperation<class MapControl::DownloadedResource> >,class std::shared_ptr<class Utility::PrioritizableTask> > > > const &,class std::shared_ptr<class Pal::UntypedAsyncOperationCancelList> const &),class MapControl::PipelineAsyncSource<class MapControl::Versioned<class std::shared_ptr<class MapControl::GenericMesh<struct Engine::xyzFloat3uvShort2stShort2> > >,class std::shared_ptr<class Pal::AsyncOperation<class Map    Unknown
    MapConfiguration.dll!Pal::Task::run(void)   Unknown
    MapConfiguration.dll!Utility::PrioritizedTaskQueue::executeNextTask(void)   Unknown
    MapConfiguration.dll!Pal::Task::run(void)   Unknown
    MapConfiguration.dll!Microsoft::WRL::Details::DelegateArgTraits<long (__cdecl ABI::Windows::System::Threading::IWorkItemHandler::*)(ABI::Windows::Foundation::IAsyncAction *)>::DelegateInvokeHelper<Microsoft::WRL::Implements<Microsoft::WRL::RuntimeClassFlags<2>,ABI::Windows::System::Threading::IWorkItemHandler,Microsoft::WRL::FtmBase>,<lambda_a2440968369958b092dc7b4a3993b234> &,-1,ABI::Windows::Foundation::IAsyncAction *>::Invoke()  Unknown
    threadpoolwinrt.dll!Windows::System::Threading::CThreadPoolWorkItem::CommonWorkCallback()   Unknown
    threadpoolwinrt.dll!Windows::System::Threading::CThreadPoolWorkItem::BatchedCallback()  Unknown
    ntdll.dll!TppWorkpExecuteCallback() Unknown
    ntdll.dll!TppWorkerThread() Unknown
    kernel32.dll!BaseThreadInitThunk()  Unknown
    ntdll.dll!RtlUserThreadStart()  Unknown

更新 2

在 Aerial 模式下不会发生崩溃:

<maps:MapControl Style="AerialWithRoads" />

更新 3

根据微软支持团队的调查:

在调查中发现,Bing Maps UWP 控件在处理瓦片时无意中无法处理某种情况。为了解决这个问题,我们的产品组已经开始回滚影响此体验的更改。如果尚未完成,此问题应该在下一个小时内开始得到解决。


我也遇到了同样的问题,只有在连接互联网时才会出现,离线情况下相同的应用程序运行完美。 - user3136572
类似问题 https://github.com/microsoft/microsoft-ui-xaml/issues/3614 - Moshe Gutman
我在使用MapControl进行缩放时遇到了同样的问题。它会像怪物一样泄漏内存。目前还没有解决方法... - NoWar
5个回答

3

其中一个地图服务返回了错误数据。这已得到缓解,控件现在应该正常工作。


1
这是我从微软得到的支持回复:
经过调查,Bing Maps UWP控件在处理瓦片时无意中无法处理某些条件。为了缓解此问题,我们的产品组已经开始回滚影响此体验的更改。如果尚未开始解决此问题,则应在接下来的一小时内开始解决。
此问题现已解决。

0
我为此做了一个测试。在 Build 2004 中,样例可以正常工作,但在 Build 20H2 中会崩溃。如果我删除更改 ZoomLevel 属性的代码,则样例在 Build 20H2 中也可以正常工作。我将向团队报告此问题。

我发现我的样本有时会在没有缩放的情况下崩溃。仅仅启动应用就可能触发崩溃,我想说大概有50%的概率。 - Moshe Gutman
昨天我收到了关于这个问题在1909上发生的报告。 - Moshe Gutman
我在上面发布了一个本地堆栈跟踪。 - Moshe Gutman

0

我遇到了完全相同的问题。我已经测试了我的应用程序两个月,它从来没有因为MapControl而崩溃。上周我提交了应用程序到商店,但是还没有崩溃。

突然间,今天当用户导航到包含不同天气层的PivotControl的地图页面时,它开始崩溃。

我不认为这与Windows 10版本有任何关系。我在多个版本(1803、1903和2004)中都遇到了这个问题。

以下是我的一些观察结果。

  1. 当我删除其他Pivot项,只留下一个时,它可以工作。
  2. 当我删除“ZoomLevel”属性并保留所有Pivot项时,它也可以工作。

看起来微软在服务端做了一些更改。


是的,微软服务器出了问题。现在已经修复了。 - Moshe Gutman

0

我也遇到了这个问题,昨天还好好的,但今天打开带有地图控件的页面时,应用程序崩溃了。移除ZoomLevel属性后问题得到解决。

 <maps:MapControl ZoomLevel="12" /> <!-- Crashed -->
 <maps:MapControl /> <!-- Working -->

移除ZoomLevel属性,但手动缩放(或使用鼠标滚轮)时,应用程序在缩放过程中崩溃。

临时解决方法:

 <maps:MapControl ZoomInteractionMode="Disabled" /> <!-- Better -->

发生在Windows 10 Build 2004上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接