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)); NotifyNewRunState?.Invoke (toplevel, new (rs));
if (!ConsoleDriver.RunningUnitTests) // Force an Idle event so that an Iteration (and Refresh) happen.
{ Invoke (() => { });
// 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 ();
});
}
return rs; return rs;
} }

View File

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