【问题标题】:Non modal form creation in powershell functionpowershell函数中的非模态表单创建
【发布时间】:2012-08-19 10:38:33
【问题描述】:

Powershell 2 中有没有办法创建非模态 Windows.Form / Dialog?表单应在函数内创建并保持打开状态,直到手动关闭。然而,函数的执行必须继续。即使任何脚本的执行完成并且用户返回到交互模式,也应该让表单保持打开状态。

我试过这样,但它甚至没有使用 start-job 创建表单。直接调用 makeform ,但是按预期工作。

function makeform { 
        [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
        [System.Windows.Forms.Application]::EnableVisualStyles();

        $form = New-Object Windows.Forms.Form
        $form.Text = 'Test Form'

        $form.Add_Shown({$form.Activate()})
        $form.ShowDialog()
}

function show  {
    start-job { makeform }
}

show  # does show nothing :| (expected the form to appear) 

start-job { makeform } -Name 'myjob' # expect the form to appear here - but it doesn't either :| 
Write-Host "Cont..."
# simulate some long running task 
[Threading.Thread]::Sleep(10000)

Wait-job myjob
Remove-job myjob
Write-Host "Done..."
Get-Job

我正在使用 .NET 4(通过配置)运行 Powershell 2,以防万一。非常感谢!

【问题讨论】:

    标签: .net winforms powershell


    【解决方案1】:

    工作方法是正确的,但你有一个错误。作业在一个全新的范围内运行,并且不继承当前范围内定义的任何变量或函数。因此函数makeform 对您的工作来说是未知的。你可以在这里验证:

    Start-Job { makeform } | Wait-Job | Receive-Job
    

    一些解决方法:

    在脚本块中声明makeform,并将该块作为-InitializationScript 传递

    $lib = {
      function makeform {     
              [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")    
              [System.Windows.Forms.Application]::EnableVisualStyles();    
    
              $form = New-Object Windows.Forms.Form    
              $form.Text = 'Test Form'    
    
              $form.Add_Shown({$form.Activate()})    
              $form.ShowDialog()    
      }
    }
    
    Start-Job { makeform } -InitializationScript $lib
    

    或者您可以将makeform 函数本身的脚本块作为作业的内容传递:

    Start-Job $function:makeform
    

    见 SO 问题In PowerShell Form.Show() does not work right, but Form.ShowDialog() does

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多