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);
}
///