나는 작동하지만 뭔가 문제가있는 것이 확실하다.다른 스레드의 Win32 Dll에서 C# Panel의 HWND를 사용 하시겠습니까?
일부 비디오 처리를 수행하고 Direct3D를 디스플레이 (내 코드 아님)로 사용하는 Win32 C++ 응용 프로그램이 있습니다. 내 작업은 GUI를 C# GUI로 대체합니다.
나는 C++ 코드를 dll로 만들었습니다. C#으로 GUI를 만들고 비디오 디스플레이 용 패널이 있습니다. 이 패널의 HWND를 dll에 전달하면 모든 것이 잘 작동하는 것 같습니다.
하지만이 패널은 작성된 스레드가 아닌 다른 스레드가 액세스하고 있기 때문에 수행하지 않아야합니다.
"나 혼자만 잘 나가고 싶다"고 생각하는 부분은 잘못되었지만 문제가 생길 수 있습니다. 예를 들어, 패널에서 클릭 이벤트를 잡아 내고 싶을 때, 패널을 생성 한 메인 또는 UI 스레드 ...에있을 것입니다.
내가 어떻게해야하는지에 대한 제안 사항은 무엇입니까? 감사합니다. 감사합니다.
괜찮습니다. SetParent()를 사용하십시오. –
아마도 C++ 코드에 Panel HWND를 직접 사용하지 않고 Panel의 하위 노드 인 자체 HWND를 생성해야합니다. 그러면 원하는대로 할 수 있습니다. (패널의 수명이 다하면 패널의 크기가 바뀌면 C# 코드 P/Invoke to C++를 사용하여 적절하게 크기를 조정해야한다는 것을 알 필요가 있습니다. 간단하지만 스레드 간 SetWindowPos를 사용할 수 있습니다.) – BrendanMcK