Why does a form displayed by PowerShell sometimes not show up?


When I create a form (window) in PowerShell, I can usually display the form using .ShowDialog():

.Visible is set to False before and after .ShowDialog().

But when I do a .Show() nothing is displayed on the screen:

And .Visible is now set to True (presumably because .Show() made the form officially visible.)

When I now try to .ShowDialog() the form again, I get the following error message:

“Form that is already visible cannot be displayed as a modal dialog box. Set the form’s visible property to false before calling showDialog.”

But when I follow the instructions to .ShowDialog() again

the result is that nothing is displayed on the screen and PowerShell hangs and cannot recover (ctrl-c doesn’t seem to work). I assume this is because the form is being displayed modally somewhere where I cannot see it (or tab to it). But why?

The coordinates of the form haven’t changed. So how does the form decide when it is physically visible and when it isn’t?


Avoid using Show() from PowerShell as it requires a message pump and that isn’t something the PowerShell console provides on the thread that creates your form. ShowDialog() works because the OS does the message pumping during this modal call. Creating the form and calling ShowDialog() works reliably for me.


Why does a form displayed by PowerShell sometimes not show up? by licensed under CC BY-SA | With most appropriate answer!

Leave a Reply