Fixes #4206. There is no need to use a Task.Run to force Invoke in the MainThreadId (#4207)

This commit is contained in:
BDisp
2025-07-24 13:26:51 +01:00
committed by GitHub
parent 3b13d5a83c
commit add2877e09
2 changed files with 12 additions and 13 deletions

View File

@@ -212,16 +212,8 @@ public static partial class Application // Run (Begin, Run, End, Stop)
NotifyNewRunState?.Invoke (toplevel, new (rs));
if (!ConsoleDriver.RunningUnitTests)
{
// Force an Idle event to be added to timeout outside the Application.MainThreadId,
// so that an Iteration (and Refresh) happen in the Application.MainThreadId
Task.Run (() =>
{
Invoke (() => { });
Task.Delay (1).Wait ();
});
}
// Force an Idle event so that an Iteration (and Refresh) happen.
Invoke (() => { });
return rs;
}

View File

@@ -275,6 +275,8 @@ public class ApplicationImpl : IApplication
if (Application.MainThreadId == Thread.CurrentThread.ManagedThreadId)
{
action ();
WakeupMainLoop ();
return;
}
@@ -294,9 +296,14 @@ public class ApplicationImpl : IApplication
}
);
// Ensure the action is executed in the main loop
// Wakeup mainloop if it's waiting for events
Application.MainLoop.Wakeup ();
WakeupMainLoop ();
void WakeupMainLoop ()
{
// Ensure the action is executed in the main loop
// Wakeup mainloop if it's waiting for events
Application.MainLoop?.Wakeup ();
}
}
/// <inheritdoc />