当我运行以下命令时,PowerShell会挂起,等待对话框关闭,即使对话框从未显示过:
[void] [Reflection.Assembly]::LoadWithPartialName( 'System.Windows.Forms' )
$d = New-Object Windows.Forms.OpenFileDialog
$d.ShowDialog( )
在ShowDialog
上拨打Windows.Forms.Form
可以正常使用。我还尝试创建Form
并将其作为父项传递给$d.ShowDialog
,但结果没有区别。
答案 0 :(得分:17)
我能够复制您的问题并找到了解决方法。我不知道为什么会这样,但它发生在其他人身上。
如果将ShowHelp属性设置为$ true,则会使对话框正确显示。
示例:
[void] [Reflection.Assembly]::LoadWithPartialName( 'System.Windows.Forms' )
$d = New-Object Windows.Forms.OpenFileDialog
$d.ShowHelp = $true
$d.ShowDialog( )
祝你好运!
答案 1 :(得分:2)
在我看来,对话框实际上打开很好,但它在powershell控制台窗口后面。不幸的是它没有显示在任务栏中,因此除非你移动powershell窗口或Alt + Tab,否则没有迹象表明它在那里。似乎ShowHelp解决方法对我没有任何影响。
编辑以下是使用次要形式创建的方法。基本思想是创建一个新窗体,从其Shown事件中打开OpenFileDialog。关键是在打开对话框之前在窗体上调用Activate,以便窗体显示在前面并显示对话框。我通过将“位置”设置为屏幕外值将屏幕移出屏幕,但您也可以在“已显示”事件中设置Form.Visible = $ false。
[void] [Reflection.Assembly]::LoadWithPartialName( 'System.Windows.Forms' )
$ofn = New-Object System.Windows.Forms.OpenFileDialog
$outer = New-Object System.Windows.Forms.Form
$outer.StartPosition = [Windows.Forms.FormStartPosition] "Manual"
$outer.Location = New-Object System.Drawing.Point -100, -100
$outer.Size = New-Object System.Drawing.Size 10, 10
$outer.add_Shown( {
$outer.Activate();
$ofn.ShowDialog( $outer );
$outer.Close();
} )
$outer.ShowDialog()
答案 2 :(得分:1)
显然这与Multi-Threaded Apartment(MTA)模式有关。 它似乎在单线程单元(-STA)模式下工作正常。