응용 프로그램이 서비스에서 호출을 받으면 각 호출에 대한 양식을 엽니 다. 사용자는 각 창에서 입력을하고 닫아야합니다. 사용자의 작업을 원활하게하기 위해 다음에 표시 될 때 사용자가 작업하고있는 창을 다시 활성화하려고합니다.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)
사람이 알고 있나요 선에 도달 할 때 "삭제 된 개체에 액세스 할 수 없습니다" "던졌습니다
?
빠른 추측은 조건을 반전시켜야한다는 것입니다. 아마도 객체가 완전히 처분되면 처분 (disposing)하면 버그가 발생합니다. – LightStriker
아마도 CLR 가비지 수집기가 이미 삭제 된 개체를 정리하여 더 이상 실제로 존재하지 않기 때문일 수 있습니다. – Liam
@Liam : 개체를 삭제해도 메서드에서 계속 참조되므로 개체를 GC로 수집하지 않습니다. – LightStriker