提问人:AOEMilad 提问时间:11/18/2023 最后编辑:AOEMilad 更新时间:11/18/2023 访问量:21
新运行空间中的 PowerShell PictureBox 对象 - 未显示
PowerShell PictureBox Object in a New Runspace - Not Showing
问:
我有一个运行命令的按钮单击事件处理程序。我想添加一个纺车GIF来获得用户体验。 我添加了一个以 GIF 作为图像的 picturebox 对象。
如果我在事件开始时更改可见性 ($pictureboxLoading.Visible = $true),则在运行下一个命令时,纺车将冻结/停止旋转。这是正常现象,因为 Windows 窗体使用一个线程,并在运行命令时冻结 GUI 管道。我知道这一点。 我的解决方案是创建一个新的运行空间,其中包含一个包含 picturebox 对象的同步哈希表,并更改运行空间中的可见性,然后继续使用其他代码,然后使其再次不可见。
由此产生了两个问题:
- 图片框的可见性在运行空间内没有变化,或者当运行空间关闭时会变回,只有一个命令会立即发生,使它看起来什么都没发生。我意外地找到了一种通过添加 MessageBox Show() 函数来触发可见性的方法,但这会导致第二个问题
- 出于某种原因,我需要一些东西来触发可见性,并保持运行空间打开,直到我完成其余的代码,然后我将在单击事件结束时再次手动将可见性更改为$false。
以下是我所做的示例:
$ScriptBlock = {
$SyncHash.Loading.Visible = $true
[System.Windows.MessageBox]::Show("test", "Test", "OK", "Information")
}
# Setup hash table
$SyncHash = [hashtable]::Synchronized(@{ })
$SyncHash.Loading = $pictureboxLoading
$runspace = [runspacefactory]::CreateRunspace()
$runspace.ThreadOptions = "UseNewThread"
$runspace.Open()
$runspace.SessionStateProxy.SetVariable("SyncHash", $SyncHash)
$psCmd = [PowerShell]::Create().AddScript($Scriptblock)
$psCmd.Runspace = $runspace
$data = $psCmd.BeginInvoke()
我在表单中添加了一个标签来测试运行空间是否正常工作,并且标签的文本从“内部”更改为“完成”,所以我知道它有效。它只是图片框对象不起作用。
有什么想法吗?
答: 暂无答案
评论