코드를 유연하게 구성하려고합니다. 따라서 내 응용 프로그램은 인터페이스를 많이 사용합니다. 내 컨트롤러 클래스에서보기의 특정 컨트롤에서 웹캠 미리보기를 시작하고 싶습니다. ClientView와 WebcamPreview의 구현은 서로 의존합니다. 따라서 WinForms 및 WPF 용으로 하나의 특정 WebcamPreview가 있습니다. 나는 2 개 가지 방법으로 종료 :UI 프레임 워크와 독립적으로 개발하기
옵션 1 :
장점 : 제네릭
단점 : 일반 선언 상단 컨트롤러 클래스까지 거품, 나는 그것을 적어도 3 개 제네릭을 선언해야 . (어쩌면 내가 뭔가 잘못하고 있어요?)
interface IClientView<TSelf>
{
TSelf SelfControl { get; }
}
interface IWebcamPreview<TSelf>
{
void Start(TSelf selfControl);
}
옵션 2 :
을 장점 : 많은 제네릭
단점을 피한다 : 지침; WPF 및 WinForms에 대해 다른 어셈블리를 컴파일합니다.
interface IClientView
{
#if WPF
ControlBase SelfControl { get; }
#else // WinForms
PictureBox SelfControl { get; }
#endif
}
interface IWebcamPreview
{
// analog
}
다른 UI 프레임 워크를 지원하려면 어떻게해야합니까?
귀하의 솔루션을 보여줌으로써 귀하는 원래의 문제로부터 조금 벗어났습니다. 나는 * 당신의'IWebcamPreview' 디자인이 더 나은 단어를 원한다면 조금 거꾸로 생각할 수도 있습니다. 이상적인 솔루션은 WPF 또는 Winforms인지 여부에 관계없이 다른 컨트롤에서 연결할 수있는 피드를 제공 할 것입니다. – perfectionist
예제와 같이 : 저는 DirectShow를 사용하여 웹캠 이미지를 미리보고 캡처합니다. DirectShow에는 미리보기를 그릴 위치에 컨트롤의 핸들 (IntPtr)이 필요합니다. 그렇다면 어떻게 분리되어야 하는가? – Matthias