【问题标题】:Powershell multithreading winforms applicationPowershell 多线程 winforms 应用程序
【发布时间】:2015-08-25 19:31:39
【问题描述】:

在过去的一年中,我承担了构建 PowerShell 应用程序的任务。

发布时的预期目的仅用于收集数据。

主要灵感来源于 Francois-Xavier Cat 的“◦LazyWinAdmin Tool (WinForm)”。

我使用 Sapiens PrimalForm 生成界面,然后构建所需的脚本。

界面正常,脚本正常。

在我工作的地方,唯一可用的 PowerShell 版本是 V2、PS 远程处理和任何 Invoke-* 都受到限制。

主要操作系统为Windows 7,少数为Win 8/8.1。

因此,您会看到我的所有脚本都使用 WMI 对象。

我的一些同事仍然使用 Net Framework 3.5,必须考虑到这一点,因为某些界面元素可能会干扰。

过去几个月耗费大量时间的主要问题是冻结的 GUI 问题。

任何尝试使用 PowerShell 制作任何类型 GUI 的人都遇到过这个问题。

目前,我已经阅读/收藏了 100 多个有关 PowerShell 多线程的论坛/网页/线程。

我已经测试过 RunSpace Pool 方法,它似乎是我需要的最快的方法。

鉴于在大多数论坛上,这种方法被认为是 .NET 开发的边缘,我已经碰壁了。

我一辈子都无法让界面、线程函数和脚本一起工作;使界面在线程上运行,脚本在单独的线程上运行。

我在下面发布了我的应用程序的完整代码。 请告知是否有办法克服脚本在单独的线程上运行。

由于整个代码超过了最大正文,我必须从我的 Git 页面添加应用程序:

https://github.com/GeorgeChe/PowershellApp.git

我曾想过对单独的脚本进行点源化并创建一种模块化应用程序,产生的错误多于修复的错误。 我还在 Git 页面上包含了线程功能。

【问题讨论】:

    标签: multithreading winforms git powershell


    【解决方案1】:

    要解决冻结 GUI 问题,最好的 IMO 是使用后台作业来收集 WMI 数据,这样表单是免费的,而不是等待 WMI 数据结束收集,

    然后您可以使用 Timer 控件,如果 WMI 收集完成,它将在后台检查,如果完成,则更新表单。

    查看此链接了解更多信息。

    https://www.sapien.com/blog/2012/05/16/powershell-studio-creating-responsive-forms/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      相关资源
      最近更新 更多