1

使用 powershell 和 windows 窗体,我有一个应用程序,其中包含我正在尝试填充的 datagridview。为了这个例子,假设我的代码如下:

    $button1_Click={
    For ($i = 0; $i -lt 100000; $i++)
    {
        $datagridview1.Rows.Add($i.ToString())
    }

在 for 指令运行期间(在我的计算机上的这个特定示例中大约 13 秒),表单显然会被锁定。

我基本上是想找到一种方法来做到这一点,以便 datagridview 不断更新而不锁定表单。我不在乎是否需要更长的时间才能运行,只要表单可用。

这是我尝试过的:

  • Start-Job,但由于 Start-Job 不能直接与我的 datagridview 交互,我需要等待作业完成,以便我可以检索结果,然后将其添加到 datagridview。这样做将涉及一个 Wait-Job,它会在 Wait-Job 运行时锁定表单。

  • Register-ObjectEvent,但这在使用 Windows 窗体时无法按预期工作。

  • 看着使用背景工作者,但意识到在 Powershell 中这是不可能的

4

1 回答 1

0

实现此目的的一种方法是使用[Windows.Forms.Application]::DoEvents(). 您不需要每次都通过循环调用它。说每 5000 次迭代,或者你可以按时间计算。可能在上次调用 DoEvents 后 250 毫秒后:

$button1_Click = {
    for ($i = 0; $i -lt 100000; $i++) {
        $datagridview1.Rows.Add($i.ToString())
        if ($i % 5000 -eq 0) { [Windows.Forms.Application]::DoEvents() }
    }
}
于 2013-08-11T21:07:04.917 回答