当应用程序收到来自服务的调用时,它会为每个调用打开一个表单。用户必须在每个窗口中进行输入并关闭它。为了让用户的工作顺利进行,我试图在显示下一个窗口时重新激活用户正在处理的窗口。
执行此操作的方法如下:
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/