當應用程序收到來自服務的呼叫時,會爲每個呼叫打開一個表單。用戶必須在每個窗口中輸入並關閉它。爲了平滑用戶的工作,我正嘗試重新激活用戶在顯示下一個窗口時正在處理的窗口。當檢查IsDisposed和Disposing時,「無法訪問已處理的對象」
這樣做的方法如下:
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)
有誰知道爲什麼會發生這種情況時,」無法訪問已釋放的對象」
?
一個快速的猜測是,你應該嘗試去反轉這個條件。可能如果一個物體被完全丟棄,處置會出錯。 – LightStriker
可能是因爲CLR垃圾收集器已經清理了已處理的對象,因此它不再存在。 – Liam
@Liam:處理一個對象不會使它被GC收集,因爲它仍然在方法中被引用。 – LightStriker