From 0ca4243e5ba309ad2d1f420eb7aab53db6cba0d3 Mon Sep 17 00:00:00 2001 From: Dongle <29563098+dongle-the-gadget@users.noreply.github.com> Date: Tue, 3 Jun 2025 18:16:31 +0700 Subject: [PATCH 1/2] Report unhandled errors in sync context to XAML --- ...atching.DispatcherQueueSynchronizationContext.cs | 13 ++++++++++++- .../DispatcherQueueSynchronizationContext.cs | 7 ++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Projections/WinAppSDK/Microsoft.UI.Dispatching.DispatcherQueueSynchronizationContext.cs b/src/Projections/WinAppSDK/Microsoft.UI.Dispatching.DispatcherQueueSynchronizationContext.cs index be413612b..d45bdccbe 100644 --- a/src/Projections/WinAppSDK/Microsoft.UI.Dispatching.DispatcherQueueSynchronizationContext.cs +++ b/src/Projections/WinAppSDK/Microsoft.UI.Dispatching.DispatcherQueueSynchronizationContext.cs @@ -22,7 +22,18 @@ public override void Post(SendOrPostCallback d, object state) if (d == null) throw new ArgumentNullException(nameof(d)); - m_dispatcherQueue.TryEnqueue(() => d(state)); + m_dispatcherQueue.TryEnqueue(() => + { + try + { + d(state); + } + catch (Exception ex) + { + ExceptionHelpers.ReportUnhandledError(ex); + throw; + } + }); } public override void Send(SendOrPostCallback d, object state) diff --git a/src/Projections/Windows.UI.Xaml/DispatcherQueueSynchronizationContext.cs b/src/Projections/Windows.UI.Xaml/DispatcherQueueSynchronizationContext.cs index dbb8f0fd5..b33845f9b 100644 --- a/src/Projections/Windows.UI.Xaml/DispatcherQueueSynchronizationContext.cs +++ b/src/Projections/Windows.UI.Xaml/DispatcherQueueSynchronizationContext.cs @@ -65,7 +65,12 @@ public override unsafe void Post(SendOrPostCallback d, object? state) dispatcherQueueProxyHandler->Release(); } - ExceptionHelpers.ThrowExceptionForHR(hresult); + if (hresult >= 0) + { + Exception ex = ExceptionHelpers.GetExceptionForHR(hresult); + ExceptionHelpers.ReportUnhandledError(ex); + throw ex; + } } /// From 54e48a65610b50f68e0e31ceb975824e3bea5863 Mon Sep 17 00:00:00 2001 From: Dongle <29563098+dongle-the-gadget@users.noreply.github.com> Date: Tue, 3 Jun 2025 18:19:31 +0700 Subject: [PATCH 2/2] Revert unneeded reporting in UWP --- .../DispatcherQueueSynchronizationContext.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Projections/Windows.UI.Xaml/DispatcherQueueSynchronizationContext.cs b/src/Projections/Windows.UI.Xaml/DispatcherQueueSynchronizationContext.cs index b33845f9b..dbb8f0fd5 100644 --- a/src/Projections/Windows.UI.Xaml/DispatcherQueueSynchronizationContext.cs +++ b/src/Projections/Windows.UI.Xaml/DispatcherQueueSynchronizationContext.cs @@ -65,12 +65,7 @@ public override unsafe void Post(SendOrPostCallback d, object? state) dispatcherQueueProxyHandler->Release(); } - if (hresult >= 0) - { - Exception ex = ExceptionHelpers.GetExceptionForHR(hresult); - ExceptionHelpers.ReportUnhandledError(ex); - throw ex; - } + ExceptionHelpers.ThrowExceptionForHR(hresult); } ///