Cri*_*isS 1 c# objectdisposedexception winforms
当应用程序收到来自服务的调用时,它会为每个调用打开一个表单。用户必须在每个窗口中进行输入并关闭它。为了使用户的工作顺利,我试图在显示下一个窗口时重新激活用户正在处理的窗口。
执行此操作的方法如下:
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();
}
Run Code Online (Sandbox Code Playgroud)
有时,当到达该行时,它会抛出“无法访问已处置的对象”
if (!_activeWhenOpen.Disposing || !_activeWhenOpen.IsDisposed)
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会发生这种情况?
尝试反转if条件:
这条线
if (!_activeWhenOpen.Disposing || !_activeWhenOpen.IsDisposed)
必须成为
if (!_activeWhenOpen.IsDisposed || !_activeWhenOpen.Disposing)
这是因为条件是按照写入的顺序检查的,因此您的代码可能会调用Disposing
已处理的对象,从而引发错误。
编辑:
我还认为你应该改变|| 到&&,因为如果您的窗口未已处理但处于正在处理状态,则可能会出现错误。
归档时间: |
|
查看次数: |
2906 次 |
最近记录: |