Browse Source

Fix headless race condition (#20143)

pull/20169/head
Julien Lebosquain 2 months ago
committed by GitHub
parent
commit
656c98a863
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 22
      src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs

22
src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs

@ -138,11 +138,25 @@ public static class HeadlessWindowExtensions
private static void RunJobsOnImpl(this TopLevel topLevel, Action<IHeadlessWindow> action) private static void RunJobsOnImpl(this TopLevel topLevel, Action<IHeadlessWindow> action)
{ {
Dispatcher.UIThread.RunJobs(); RunJobsAndRender();
AvaloniaHeadlessPlatform.ForceRenderTimerTick();
Dispatcher.UIThread.RunJobs();
action(GetImpl(topLevel)); action(GetImpl(topLevel));
Dispatcher.UIThread.RunJobs(); RunJobsAndRender();
void RunJobsAndRender()
{
var count = 0;
var dispatcher = Dispatcher.UIThread;
while (dispatcher.HasJobsWithPriority(DispatcherPriority.MinimumActiveValue))
{
if (count >= 10)
throw new InvalidOperationException("Dispatcher job loop detected");
dispatcher.RunJobs();
AvaloniaHeadlessPlatform.ForceRenderTimerTick();
++count;
}
}
} }
private static IHeadlessWindow GetImpl(this TopLevel topLevel) private static IHeadlessWindow GetImpl(this TopLevel topLevel)

Loading…
Cancel
Save