使用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中不可能
答案 0 :(得分: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() }
}
}