Winforms 为什么PowerShell显示的表单有时不显示?

Winforms 为什么PowerShell显示的表单有时不显示?,winforms,powershell,Winforms,Powershell,在PowerShell中创建表单(窗口)时,通常可以使用.ShowDialog()显示表单: .Visible在.ShowDialog()之前和之后设置为False 但是当我执行.Show()时,屏幕上不会显示任何内容: $form.Show() 并且.Visible现在设置为True(可能是因为.Show()使表单正式可见) 当我现在再次尝试.ShowDialog()表单时,会收到以下错误消息: “已可见的表单不能显示为模式对话框。在调用showDialog之前,请将表单的visible属性

在PowerShell中创建表单(窗口)时,通常可以使用.ShowDialog()显示表单:

.Visible在.ShowDialog()之前和之后设置为False

但是当我执行.Show()时,屏幕上不会显示任何内容:

$form.Show()
并且.Visible现在设置为True(可能是因为.Show()使表单正式可见)

当我现在再次尝试.ShowDialog()表单时,会收到以下错误消息:

“已可见的表单不能显示为模式对话框。在调用showDialog之前,请将表单的visible属性设置为false。”

但是当我再次按照.ShowDialog()的说明操作时

结果是屏幕上没有显示任何内容,PowerShell挂起且无法恢复(ctrl-c似乎不起作用)。我假设这是因为表单是在我看不到的地方(或是在它的选项卡上)以模式显示的。但是为什么呢


表格的坐标没有改变。那么表单如何决定何时物理可见以及何时不可见呢?

避免使用PowerShell中的Show(),因为它需要消息泵,而PowerShell控制台在创建表单的线程上并没有提供消息泵。ShowDialog()之所以有效,是因为操作系统在此模式调用期间执行消息泵送。创建表单并调用ShowDialog()对我来说工作可靠。

我的问题:当将ShowDialog()用作powershell登录脚本的一部分时,第一个表单窗口不会显示,powershell在登录时似乎会冻结。症状与原来的岗位相似

我找到的解决方案:使用以下选项,而不是使用$form.showDialog():

[System.Windows.Forms.Application]::运行($form)


现在对我来说效果很好,只有系列中的第一个表单需要更改。脚本中随后出现的所有其他表单仍然使用showDialog。

有用的知识,但没有回答我所有的问题:-(在我的计算机上,第一次调用Show()(或设置visible=1)会导致窗体出现得很短,然后消失。之后,包括ShowDialog()在内的进一步调用根本不会导致窗体出现。我怀疑这是由于缺少消息传输。如果避免调用Show()并设置visible属性,则ShowDialog()会效果很好。虽然有点晚了,但我发布了一篇文章供将来参考。这样可以返回结果吗?
$form.Show()
$form.Visible=0
$form.ShowDialog()