gpt4 book ai didi

winforms - trap {}在winforms中不起作用

转载 作者:行者123 更新时间:2023-12-03 08:31:05 26 4
gpt4 key购买 nike

我所有的脚本中都有一个通用的trap{},用于处理和记录所有不可预见的异​​常,而这些异常本来不是通过Try/catch处理的。

这很好。

但是,当我有一个带有Windows窗体的脚本时,所有异常都将自动显示为.Net-popup,并且trap{}内部的代码未执行,因此该错误永远不会得到记录。

简单的例子:

trap { Write-Host "This is written from inside the trap" }

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.Application]::EnableVisualStyles()

$form1 = New-Object 'System.Windows.Forms.Form'
$form1.ClientSize = '200, 150'
$button1 = New-Object 'System.Windows.Forms.Button'
$button1.Location = '54, 45'
$button1.Size = '75, 23'
$form1.Controls.Add($button1)
$button1.add_mouseclick({ Testfunction })

function TestFunction {
$button1.falseproperty = 1 # this causes an exception
}


TestFunction ## this call of the faulty function gets trapped by the trap, the call from the button does not
$form1.ShowDialog()

为什么陷阱被忽略?
以及如何使我的表单在出现异常的情况下执行陷阱?
尤其是在具有100多个功能的脚本中,我不想为每个功能添加 trap{}(有效)。

最佳答案

WinForms通常会处理UI线程上的异常,但是您可以订阅一个事件来自行处理这些异常:

[Windows.Forms.Application]::add_ThreadException({ ... })

关于winforms - trap {}在winforms中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23582827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com