gpt4 book ai didi

c# - 检查 IsDisposed 和 Disposing 时为 "Cannot access a disposed object"

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:37 26 4
gpt4 key购买 nike

当应用程序收到来自服务的调用时,它会为每个调用打开一个表单。用户必须在每个窗口中进行输入并关闭它。为了让用户的工作顺利进行,我试图在显示下一个窗口时重新激活用户正在处理的窗口。

执行此操作的方法如下:

private void ActivatePreviousActiveForm() {

if (_activeWhenOpen != null && _activeWhenOpen.InvokeRequired) {
if (!_activeWhenOpen.Disposing || !_activeWhenOpen.IsDisposed)
_activeWhenOpen.Invoke((MethodInvoker)ActivatePreviousActiveForm);
} else
if (_activeWhenOpen != null && !(_activeWhenOpen is FrmRuntimeError))
_activeWhenOpen.Activate();
}

有时它会在到达该行时抛出““无法访问已处置的对象”

if (!_activeWhenOpen.Disposing || !_activeWhenOpen.IsDisposed)

有人知道为什么会这样吗?

最佳答案

尝试反转if条件:

这一行

if (!_activeWhenOpen.Disposing || !_activeWhenOpen.IsDisposed)

必须成为

if (!_activeWhenOpen.IsDisposed || !_activeWhenOpen.Disposing)

这是因为条件是按照写入顺序检查的,因此您的代码可能会在已处置的对象上调用 Disposing,从而引发错误。

编辑:

我还认为你应该将 || 更改为 && ,因为如果你的窗口不是 Disposed 但处于 Disposing 状态,你可能会出错。

关于c# - 检查 IsDisposed 和 Disposing 时为 "Cannot access a disposed object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13161115/

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