[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] powershell如何在form中点击按钮时不让窗口卡死

我在form中设置的某个按钮是一个循环,我点击按钮后必须要等待循环执行完才能操作form。我了解到可以通过start-job新开一个进程然后加入Doevents实现,我目前遇到的困难是object类型的变量如何传参?百度了一圈貌似无法实现,这样的话有无其他方法让form不卡死?

使用powershell.Create创建线程,addArgument传递参数
  1. cls
  2. [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
  3. $job1 = {
  4.     param($btn,$counter)
  5.     $counter..0 | foreach {
  6.         $btn.Text = $_
  7.         Start-Sleep -Milliseconds 100
  8.     }
  9. }
  10. $f = New-Object "System.Windows.Forms.Form"
  11. $f.Width = 210
  12. $f.Height = 200
  13. $f.StartPosition = 'CenterScreen'
  14. $b = New-Object 'System.Windows.Forms.Button'
  15. $b.Location = New-Object 'System.Drawing.Point'(50,50)
  16. $b.Width = 100
  17. $b.Height = 50
  18. $b.Text = 'Click'
  19. $b.add_Click({
  20.     [powershell]::Create().
  21.         AddScript($job1).    #脚本
  22.         AddArgument($this).  #参数1 btn
  23.         AddArgument(200).    #参数2 counter
  24.         BeginInvoke()
  25. })
  26. $f.Controls.Add($b)
  27. $f.ShowDialog()
复制代码
2

评分人数

    • Royo: 感谢大佬技术 + 1
    • pd1: 感谢分享技术 + 1

TOP

返回列表