找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 11959|回复: 1

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

[复制链接]
发表于 2022-12-1 09:37:40 | 显示全部楼层 |阅读模式
我在form中设置的某个按钮是一个循环,我点击按钮后必须要等待循环执行完才能操作form。我了解到可以通过start-job新开一个进程然后加入Doevents实现,我目前遇到的困难是object类型的变量如何传参?百度了一圈貌似无法实现,这样的话有无其他方法让form不卡死?
发表于 2022-12-1 14:15:54 | 显示全部楼层
使用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技术 +2 收起 理由
Royo + 1 感谢大佬
pd1 + 1 感谢分享

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:14 , Processed in 0.019113 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表