diff --git a/PSReadLine/ReadLine.cs b/PSReadLine/ReadLine.cs index 980c7c0d..fb07be6a 100644 --- a/PSReadLine/ReadLine.cs +++ b/PSReadLine/ReadLine.cs @@ -206,28 +206,22 @@ internal static PSKeyInfo ReadKey() bool runPipelineForEventProcessing = false; foreach (var sub in eventSubscribers) { - if (sub.SourceIdentifier.Equals("PowerShell.OnIdle", StringComparison.OrdinalIgnoreCase)) + runPipelineForEventProcessing = true; + if (sub.SourceIdentifier.Equals(PSEngineEvent.OnIdle, StringComparison.OrdinalIgnoreCase)) { // There is an OnIdle event. We're idle because we timed out. Normally // PowerShell generates this event, but PowerShell assumes the engine is not // idle because it called PSConsoleHostReadLine which isn't returning. // So we generate the event instead. - _singleton._engineIntrinsics.Events.GenerateEvent("PowerShell.OnIdle", null, null, null); - runPipelineForEventProcessing = true; - break; - } + _singleton._engineIntrinsics.Events.GenerateEvent(PSEngineEvent.OnIdle, null, null, null); - // If there are any event subscribers that have an action (which might - // write to the console) and have a source object (i.e. aren't engine - // events), run a tiny useless bit of PowerShell so that the events - // can be processed. - if (sub.Action != null && sub.SourceObject != null) - { - runPipelineForEventProcessing = true; + // Break out so we don't genreate more than one 'OnIdle' event for a timeout. break; } } + // If there are any event subscribers, run a tiny useless PowerShell pipeline + // so that the events can be processed. if (runPipelineForEventProcessing) { if (ps == null)