Browse Source

Make sure callback are on the UI thread

pull/11146/head
Max Katz 3 years ago
parent
commit
35782d9a1b
  1. 9
      src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs

9
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();

Loading…
Cancel
Save