diff --git a/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs b/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs index 90167fa8a1..c2eba7e503 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs @@ -649,7 +649,8 @@ public partial class Dispatcher { try { - action(arg); + using (AvaloniaSynchronizationContext.Ensure(this, (DispatcherPriority)priority)) + action(arg); } catch (Exception ex) when (ExceptionFilter(ex)) { diff --git a/tests/Avalonia.Base.UnitTests/DispatcherTests.cs b/tests/Avalonia.Base.UnitTests/DispatcherTests.cs index 2efb648f4d..f3aaa0b6c2 100644 --- a/tests/Avalonia.Base.UnitTests/DispatcherTests.cs +++ b/tests/Avalonia.Base.UnitTests/DispatcherTests.cs @@ -448,6 +448,7 @@ public partial class DispatcherTests }, DispatcherPriority.Background); disp.MainLoop(CancellationToken.None); + disp.Send(_ => DumpCurrentPriority(), DispatcherPriority.Send); disp.Invoke(DumpCurrentPriority, DispatcherPriority.Send, TestContext.Current.CancellationToken); disp.Invoke(() => { @@ -458,7 +459,7 @@ public partial class DispatcherTests Assert.Equal( new[] { - DispatcherPriority.Normal, DispatcherPriority.Loaded, DispatcherPriority.Input, DispatcherPriority.Background, + DispatcherPriority.Normal, DispatcherPriority.Loaded, DispatcherPriority.Input, DispatcherPriority.Background, DispatcherPriority.Send, DispatcherPriority.Send, DispatcherPriority.Send, }, priorities);