Приложения UWP закрываются, когда элемент управления картой собирается сборщиком мусора - PullRequest
0 голосов
/ 14 июля 2020

Я создал картографическое приложение, которое помещает пользовательские плитки в элемент управления Bing Map для отображения тепловой карты. Приложение работало без проблем со сборкой 16299. Со сборкой 17663 я получаю следующую ошибку:

Исключение, брошенное по адресу 0x00007FFB1496DF33 (ntdll.dll) в xxxxx.exe: 0xC0000005: место записи нарушения прав доступа 0x0000000000000024.

Эта ошибка возникает только после того, как я покину страницу, содержащую MapControl. Ошибка может возникнуть сразу после перехода на другую страницу или после просмотра многих страниц. Я также заметил, что вторая сборка мусора также происходит в момент возникновения ошибки.

Моя трассировка стека точно такая же, как трассировка стека в следующем сообщении:

[https://social.msdn.microsoft.com/Forums/vstudio/en-US/1c0d361f-9470-4c38-b856-0ae502427b56/visibility-of-maptilesource?forum=bingmapswindows8 ] [1]

Поскольку я новичок в UWP, я не совсем уверен, как разработчик решил проблему в приведенной выше ссылке. По трассировке стека я бы предположил, что у MapControl возникают проблемы при сборке мусора. Я попытался удалить все плитки и удалить все объекты из элемента управления картой при выходе со страницы, но это не решило проблему.

Я не уверен, как отладить эту проблему, поскольку элемент управления картой и Кажется, что набор плиток работает нормально на странице карты, только когда возникает G C, я получаю фатальную ошибку.

Я видел в сообщении на форуме Microsoft Dev, в котором предлагалось сделать стат c. Просто кажется странным, что сборка работает правильно для 16299, но со сборкой 17663 она ломается. Мы будем очень благодарны за любые предложения по порядку действий.

Моя трассировка стека:

ntdll.dll!RtlpWaitOnCriticalSection()
ntdll.dll!RtlpEnterCriticalSectionContended()
ntdll.dll!RtlEnterCriticalSection()
BingMaps.dll!Pal::CppEvent<class MapControl::MapMode &>::detach(class Pal::EventId *)
BingMaps.dll!Microsoft::WRL::Details::RuntimeClassImpl<struct Microsoft::WRL::RuntimeClassFlags<1>,1,1,0,struct IMapControlAdapter,struct IMapControlAdapterInternal,struct IOverviewMapControlAdapter,struct IMapOverlayModelBingServices>::Release(void) 
JpMapControl.dll!JpMapControlHybridAdapter::~JpMapControlHybridAdapter(void)
JpMapControl.dll!JpMapControlHybridAdapter::`vector deleting destructor'(unsigned int)
JpMapControl.dll!Microsoft::WRL::Details::RuntimeClassImpl<struct 
Microsoft::WRL::RuntimeClassFlags<1>,1,1,0,struct IMapControlAdapter,struct IMapControlHybridAdapter,struct IMapControlHybridAdapterPrivate,struct IMapKeyValidator,class Microsoft::WRL::FtmBase>::Release(void)
Windows.UI.Xaml.dll!DirectUI::TrackerTargetReference::Clear(unsigned char bEnsureTrackerTarget, unsigned char bForceLoopback) Line 697
[Inline Frame] Windows.UI.Xaml.dll!DirectUI::TrackerPtr<IUnknown,1,0>::Clear() Line 267
[Inline Frame] Windows.UI.Xaml.dll!ctl::WeakReferenceSourceNoThreadId::RemovePtrValue(DirectUI::TrackerPtr<IUnknown,1,0> &) Line 233
[Inline Frame] Windows.UI.Xaml.dll!ctl::WeakReferenceSourceNoThreadId::DeleteTrackerHandle(TrackerHandle__ *) Line 1087
Windows.UI.Xaml.dll!ctl::interface_forwarder<ITrackerOwner,DirectUI::DependencyObject>::DeleteTrackerHandle(TrackerHandle__ * handle=0x00000241365f6920) Line 98
Windows.UI.Xaml.Maps.dll!Private::TrackerPtr<struct Windows::Foundation::Collections::IObservableVector<class Windows::UI::Xaml::DependencyObject *> >::~TrackerPtr<struct Windows::Foundation::Collections::IObservableVector<class Windows::UI::Xaml::DependencyObject *> >(void)
Windows.UI.Xaml.Maps.dll!Windows::UI::Xaml::Controls::Maps::MapControl::~MapControl(void)
Windows.UI.Xaml.Maps.dll!Windows::UI::Xaml::Controls::Maps::MapControl::`vector deleting destructor'(unsigned int)
Windows.UI.Xaml.Maps.dll!Private::ReferenceTrackerRuntimeClass<struct 
Windows::UI::Xaml::Controls::Maps::IMapControl,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl2,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl3,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl4,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl5,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl6,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl7,class Microsoft::WRL::ComposableBase<struct 
Windows::UI::Xaml::Controls::IControlFactory>,class Microsoft::WRL::Details::Nil>::DeleteThis(void)
Windows.UI.Xaml.Maps.dll!Private::ReferenceTrackerRuntimeClass<struct 
Windows::UI::Xaml::Controls::Maps::IMapControl,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl2,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl3,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl4,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl5,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl6,struct 
Windows::UI::Xaml::Controls::Maps::IMapControl7,class Microsoft::WRL::ComposableBase<struct 
Windows::UI::Xaml::Controls::IControlFactory>,class Microsoft::WRL::Details::Nil>::Release(void)
[Inline Frame] Windows.UI.Xaml.dll!ctl::release_interface(DirectUI::DependencyObject * &) Line 135
Windows.UI.Xaml.dll!DirectUI::DependencyObject::ReleaseForPeerReferenceHelper() Line 2634
Windows.UI.Xaml.dll!DirectUI::DependencyObject::ClearPeerReferences() Line 748
Windows.UI.Xaml.dll!DirectUI::DependencyObject::Deinitialize() Line 719
Windows.UI.Xaml.dll!DirectUI::UIAffinityReleaseQueue::DoCleanup(unsigned char bSync='\0', unsigned char * completed=0x000000724907eab0) Line 191
Windows.UI.Xaml.dll!DirectUI::UIAffinityReleaseQueue::BuildTree(unsigned char * returnValue=0x000000724907eb50) Line 44
Windows.UI.Xaml.dll!DirectUI::BuildTreeService::BuildTrees(bool * pWorkLeft=0x000000724907eb88) Line 111
Windows.UI.Xaml.dll!AgCoreCallbacks::FrameworkCallbacks_PhasedWorkDistributor_PerformWork(unsigned int * pWorkleft=0x000000724907ebe4) Line 560
[Inline Frame] Windows.UI.Xaml.dll!CFxCallbacks::FrameworkCallbacks_PhasedWorkDistributor_PerformWork(unsigned int *) Line 1131
Windows.UI.Xaml.dll!CCoreServices::NWDrawTree(HWWalk * pHWWalk=0x0000024124ebcf50, CWindowRenderTarget * pRenderTarget=0x0000024124ee2ad0, VisualTree * pVisualTree, unsigned int forceRedraw=0x00000000, XRECT_WH * prcDirtyRect=0x000000724907edc0) Line 6982  C++
Windows.UI.Xaml.dll!CCoreServices::NWDrawMainTree(CWindowRenderTarget * pIRenderTarget=0x0000024124ee2ad0, bool fForceRedraw, XRECT_WH * prcDirtyRect=0x000000724907edc0) Line 6723
Windows.UI.Xaml.dll!CWindowRenderTarget::Draw(CCoreServices * fForceRedraw=0x00000000, unsigned int prcDirtyRect={...}, XRECT_WH *) Line 137
Windows.UI.Xaml.dll!CXcpBrowserHost::OnTick() Line 538
Windows.UI.Xaml.dll!CXcpDispatcher::Tick() Line 1446
Windows.UI.Xaml.dll!CXcpDispatcher::OnReentrancyProtectedWindowMessage(HWND__ * msg=0x00000402, unsigned int lParam=0x0000000000000000, unsigned __int64) Line 1046
[Inline Frame] Windows.UI.Xaml.dll!CXcpDispatcher::ProcessMessage(HWND__ *) Line 887 
Windows.UI.Xaml.dll!CXcpDispatcher::WindowProc(HWND__ * hwnd=0x0000000000080a2e, unsigned int msg=0x00000402, unsigned __int64 wParam=0x0000000000000000, __int64 lParam=0x0000000000000000) Line 836
Windows.UI.Xaml.dll!CDeferredInvoke::DispatchQueuedMessage(bool * dispatchedWork=0x000000724907ef38, bool * hasMoreWork) Line 299
[Inline Frame] Windows.UI.Xaml.dll!CXcpDispatcher::MessageTimerCallback() Line 1531
Windows.UI.Xaml.dll!CXcpDispatcher::MessageTimerCallbackStatic(void * myUserData=0x0000024124ec0ae0) Line 1523
CoreMessaging.dll!Microsoft__CoreUI__Dispatch__TimeoutHandler$CallbackThunk(class System::Delegate *)
CoreMessaging.dll!Microsoft::CoreUI::Dispatch::TimeoutManager::Callback_OnDispatch()
CoreMessaging.dll!Microsoft::CoreUI::Dispatch::EventLoop::Callback_RunCoreLoop(struct Microsoft::CoreUI::Dispatch::RunMode,bool,bool &)
CoreMessaging.dll!Microsoft::CoreUI::Dispatch::UserAdapter::OnUserDispatch(bool,struct Microsoft::CoreUI::Dispatch::UserAdapter__UserPriority,struct System::IntPtr &)
CoreMessaging.dll!Microsoft::CoreUI::Dispatch::UserAdapter_DoWork(struct Microsoft::CoreUI::Dispatch::UserData *,struct Microsoft::CoreUI::Dispatch::UserAdapter__UserPriority,bool)
CoreMessaging.dll!Microsoft::CoreUI::Dispatch::UserAdapter_WindowProc()
user32.dll!UserCallWinProcCheckWow()
user32.dll!DispatchMessageWorker()
Windows.UI.dll!Windows::UI::Core::CDispatcher::ProcessMessage(bool bDrainQueue, bool * pbWindowMessagesProcessed=0x000000724907f610, bool * pbInvokeItemProcessed=0x000000724907f611) Line 327
Windows.UI.dll!Windows::UI::Core::CDispatcher::WaitAndProcessMessagesInternal(bool bRunAlwaysOnce, void * hEventWait=0x0000000000000000) Line 1953   
Windows.UI.dll!Windows::UI::Core::CDispatcher::ProcessEvents(Windows::UI::Core::CoreProcessEventsOption options=CoreProcessEventsOption_ProcessUntilQuit) Line 599

Windows.UI.Xaml.dll!CJupiterWindow::RunCoreWindowMessageLoop() Line 1246
[Inline Frame] Windows.UI.Xaml.dll!CJupiterControl::RunMessageLoop() Line 1024
Windows.UI.Xaml.dll!DirectUI::DXamlCore::RunMessageLoop() Line 2446
twinapi.appcore.dll!Windows::ApplicationModel::Core::CoreApplicationView::Run()
twinapi.appcore.dll!<lambda>(void)()
SHCore.dll!_WrapperThreadProc()
kernel32.dll!BaseThreadInitThunk()
ntdll.dll!RtlUserThreadStart()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...