From 35782d9a1b3cb13ecfa9a7ddc6bdb7ca7703e52e Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 28 Apr 2023 06:25:10 -0400 Subject: [PATCH] Make sure callback are on the UI thread --- .../Avalonia.Headless/HeadlessUnitTestSession.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs b/src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs index 312064064f..b44d530442 100644 --- a/src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs +++ b/src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs @@ -64,13 +64,14 @@ public sealed class HeadlessUnitTestSession : IDisposable _queue.Add(() => { var cts = new CancellationTokenSource(); - using var globalCts = token.Register(s => ((CancellationTokenSource)s!).Cancel(), cts); - using var localCts = cancellationToken.Register(s => ((CancellationTokenSource)s!).Cancel(), cts); + using var globalCts = token.Register(s => ((CancellationTokenSource)s!).Cancel(), cts, true); + using var localCts = cancellationToken.Register(s => ((CancellationTokenSource)s!).Cancel(), cts, true); try { var task = action(); - task.ContinueWith((_, s) => ((CancellationTokenSource)s!).Cancel(), cts); + task.ContinueWith((_, s) => ((CancellationTokenSource)s!).Cancel(), cts, + TaskScheduler.FromCurrentSynchronizationContext()); if (cts.IsCancellationRequested) { @@ -78,7 +79,7 @@ public sealed class HeadlessUnitTestSession : IDisposable } var frame = new DispatcherFrame(); - using var innerCts = cts.Token.Register(() => frame.Continue = false); + using var innerCts = cts.Token.Register(() => frame.Continue = false, true); Dispatcher.UIThread.PushFrame(frame); var result = task.GetAwaiter().GetResult();