2
0
Эх сурвалжийг харах

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

BDisp 1 сар өмнө
parent
commit
add2877e09

+ 2 - 10
Terminal.Gui/App/Application.Run.cs

@@ -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;
     }

+ 10 - 3
Terminal.Gui/App/ApplicationImpl.cs

@@ -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 />