저는 많은 Windows GUI 프로그래밍을하지 않기 때문에, WinForms에 익숙한 사람들에게 익숙하지 않을 수 있습니다. 불행히도 문제를 설명 할 수있는 리소스를 찾을 수 없었습니다. 오늘 디버깅하는 동안 발생했습니다.Control.EndInvoke는 예외를위한 호출 스택을 재설정합니다.
비동기 대리인에서 EndInvoke를 호출하는 경우 재 throw 된 메소드의 실행 중에 throw 된 예외가 발생합니다. 호출 스택에는 예외의 원래 소스가 반영됩니다.
그러나 Windows.Forms.Control에서 유사한 작업을 수행하면 Control.EndInvoke 구현이 호출 스택을 다시 설정합니다. 이것은 간단한 테스트 또는 반사경의 코드를 보면 알 수 있습니다. EndInvoke에서 관련 코드 발췌 여기에 있습니다 :
if (entry.exception != null)
{
throw entry.exception;
}
는 이해가 그 제어 및 비동기 대표에 EndInvoke이 다른/시작,하지만 난 Control.EndInvoke에 비슷한 행동을 기대했을 것이다.
원래 호출 스택을 보존하기 위해 비동기 대리자가 수행하는 작업이 Control에서 수행되지 않는 이유가 있습니까?
저는 알고 있습니다. 그러나 저는 Windows.Forms.Control을 구현 한 사람이 아니기 때문에 거의 도움이되지 않습니다. –