Приложение WPF аварийно завершает работу при перетаскивании на него элемента из меню «Пуск» - PullRequest
2 голосов
/ 03 апреля 2019

Я столкнулся со странной проблемой. При перетаскивании элемента из меню «Пуск» Windows поверх приложения происходит сбой.

Однако, если я перетащу файл из Проводника поверх него, он будет обработан правильно (перетаскиваемый элемент отображает красный круг с линией, проходящей через него, когда он находится над моим приложением).

И вот тут происходит странная вещь. Теперь, когда я попытался перетащить файл из Проводника поверх него, программа не падает, когда я пытаюсь перетащить элемент из меню «Пуск». Вылетает, только если первый перетаскиваемый элемент после запуска приложения находится в меню «Пуск».

Окно и все элементы управления внутри имеют AllowDrop="False". Я попытался добавить обработчики событий для DragOver и DragEnter на большинстве внешних элементов управления, но точки останова никогда не были достигнуты.

Это исключение, которое я получаю:

Помощник по управляемой отладке 'FatalExecutionEngineError': 'Во время выполнения обнаружена фатальная ошибка. Адрес ошибки был 0xc789d078 в потоке 0x59f4. Код ошибки 0x80131623. Эта ошибка может быть ошибкой в ​​CLR или в небезопасных или не поддающихся проверке частях пользовательского кода. Распространенными источниками этой ошибки являются ошибки пользовательского маршалинга для COM-взаимодействия или PInvoke, которые могут повредить стек. '

За этим следует исключение:

System.ExecutionEngineException: 'Исключение типа' System.ExecutionEngineException 'было сгенерировано.'

И приложение выходит.

Я использую Windows 10 и 64bit. .NET Framework 4.7.2

Стек вызовов:

  [External Code] 
DataExchange.dll!CWinRtTarget::DragOver(struct IDragDropArgsPriv *,struct IDragUIOverridePriv * *)  Unknown
rpcrt4.dll!Invoke()    Unknown
rpcrt4.dll!Ndr64StubWorker()    Unknown
rpcrt4.dll!NdrStubCall3()   Unknown
combase.dll!CStdStubBuffer_Invoke(IRpcStubBuffer * This, tagRPCOLEMESSAGE * prpcmsg, IRpcChannelBuffer * pRpcChannelBuffer) Line 1524   C++
rpcrt4.dll!CStdStubBuffer_Invoke()  Unknown
[Inline Frame] combase.dll!InvokeStubWithExceptionPolicyAndTracing::__l6::<lambda_76d9e92c799d246a4afbe64a2bf5673d>::operator()() Line 1907 C++
combase.dll!ObjectMethodExceptionHandlingAction<<lambda_76d9e92c799d246a4afbe64a2bf5673d> >(InvokeStubWithExceptionPolicyAndTracing::__l6::<lambda_76d9e92c799d246a4afbe64a2bf5673d> action, ObjectMethodExceptionHandlingInfo * pExceptionHandlingInfo, ExceptionHandlingResult * pExceptionHandlingResult, void *) Line 91    C++
[Inline Frame] combase.dll!InvokeStubWithExceptionPolicyAndTracing(IRpcStubBuffer * pMsg, tagRPCOLEMESSAGE *) Line 1905 C++
combase.dll!DefaultStubInvoke(bool bIsAsyncBeginMethod, IServerCall * pServerCall, IRpcChannelBuffer * pChannel, IRpcStubBuffer * pStub, unsigned long * pdwFault) Line 1974    C++
[Inline Frame] combase.dll!SyncStubCall::Invoke(IServerCall *) Line 2031    C++
[Inline Frame] combase.dll!SyncServerCall::StubInvoke(IRpcChannelBuffer *) Line 807 C++
[Inline Frame] combase.dll!StubInvoke(tagRPCOLEMESSAGE * pMsg, CStdIdentity * pStdID, IRpcStubBuffer *) Line 2257   C++
combase.dll!ServerCall::ContextInvoke(tagRPCOLEMESSAGE * pMessage, IRpcStubBuffer * pStub, CServerChannel * pChannel, tagIPIDEntry * pIPIDEntry, unsigned long * pdwFault) Line 1542    C++
[Inline Frame] combase.dll!CServerChannel::ContextInvoke(tagRPCOLEMESSAGE *) Line 1438  C++
[Inline Frame] combase.dll!DefaultInvokeInApartment(tagRPCOLEMESSAGE *) Line 3549   C++
[Inline Frame] combase.dll!ClassicSTAInvokeInApartment(ServerCall *) Line 3313  C++
combase.dll!AppInvoke(ServerCall * pServerCall, CServerChannel * pChannel, IRpcStubBuffer * pStub, void * pv, void * pStubBuffer, tagIPIDEntry * pIPIDEntry, WireLocalThis * pLocalb) Line 1688 C++
combase.dll!ComInvokeWithLockAndIPID(ServerCall * pServerCall, tagIPIDEntry * pIPIDEntry, bool * pbCallerResponsibleForRequestMessageCleanup) Line 2804 C++
[Inline Frame] combase.dll!ComInvoke(ServerCall *) Line 2326    C++
combase.dll!ThreadDispatch(ServerCall * pServerCall) Line 422   C++
combase.dll!ThreadWndProc(HWND__ * window, unsigned int message, unsigned __int64 wparam, __int64 params) Line 798  C++
user32.dll!UserCallWinProcCheckWow()    Unknown
user32.dll!DispatchMessageWorker()  Unknown
WindowsBase.ni.dll!00007ffbc7f8f138()   Unknown

1 Ответ

0 голосов
/ 11 апреля 2019

На моем компьютере возникают те же симптомы. То же самое верно для любого приложения, созданного в WPF. Откройте меню «Пуск», чтобы исправить это.

...