랩핑 된 Windows Forms 기반 컨트롤에서 발생하는 메모리 누수 문제를 해결하기 위해 System.AddIn을 사용하는 WPF 응용 프로그램에서 작업하고 있습니다. WindowsFormsHost 컨트롤 추가 기능은 Windows Forms 기반 컨트롤의로드 및 언로드에 필요하므로 WindowsFormsHost의 오버 헤드를 피하기 위해 필요합니다.이 오버 헤드는 현재 WPF 버전에서 응용 프로그램이 닫히고 Windows Forms 기반 컨트롤에서 메모리 누수가 발생할 때까지 중단됩니다. 나쁜 정리 논리.System.AddIn을 사용하는 WPF 응용 프로그램을 종료 할 때 "잘못된 창 핸들"이 발생합니다.
우리가 직면 한 문제는 응용 프로그램에서 추가 기능을로드하고 언로드 한 후 WPF 응용 프로그램이 응용 프로그램 종료시 "잘못된 창 핸들"이라는 Win32 예외를 throw한다는 것입니다. 이것은 일반적으로 끔찍한 문제는 아니지만 예외를 잡는 것이 가능하더라도 Windows가 응용 프로그램을 충돌로보고 중지하지 않고 Windows 7에서 충돌 대화 상자를 표시하는 것을 허용하지 않으며 이는 용인 할 수 없습니다. 코드에 관해서
는 관련 사실은 다음과 같습니다
추가 기능이로드되고 WPF 호스트 응용 프로그램에서 언로드 될 경우 예외가 발생합니다. 추가 기능을 언로드하기 전에 호출 된 사용자 지정 Dispose 메서드의 일부로 WindowsFormsHost 컨트롤과 Windows Forms 기반 컨트롤을 추가 기능에 배치합니다.
추가 기능은 MSDN 설명서 및 블로그 게시물에서 필수적으로 언급 된 언로드 (언로드) 작업 전에 해당 Dispatcher를 종료하고이 문제도 해결할 수 있습니다 이 경우.
일부보고에는 Windows Forms 기반 컨트롤을 사용할 수 없으므로 변환 할 보고서 파일이 너무 많고 WPF 버전이 적절하지 않으며 변경할 시간이 없습니다.
코드 샘플을 제공 할 수 없어서 내가 놓친 뭔가가있을 경우를 대비하여 그러한 시나리오에 대한 생각이나 이전 경험을 제공합니다.
나는 이것에 또한 뛰어 들었다 - 설명을 듣는 것을 싶을. – Jake