可以在另一个线程的Win32 Dll中使用c# Panel's HWND

本文关键字:Panel HWND 另一个 线程 Dll Win32 | 更新日期: 2023-09-27 18:15:23

我有一些工作,但我不确定它是好的,如果它会导致以后的问题。

我有一个Win32 c++应用程序,它做一些视频处理并使用Direct3D显示(不是我的代码)。我的任务是用c# GUI代替GUI。

我已经把c++代码变成了一个dll。我在c#中创建了一个GUI,并有一个用于视频显示的面板。我把这个面板的HWND传递给dll,一切似乎都工作得很好。

但是,该面板正在被一个线程访问,而不是创建它的线程,这是不应该做的。
我的一部分想要"顺其自然",但这感觉不对,我怀疑这会导致问题。例如,当我们想要捕获面板上的点击事件时,它将在主线程或UI线程上…创建了面板。

有什么建议我应该怎么做吗?谢谢你!由于

可以在另一个线程的Win32 Dll中使用c# Panel's HWND

我想你已经知道答案了。Windows具有线程亲和性。窗口上的所有操作都应该在创建它的线程中执行。

给定此规则,我无法想象DLL负责将窗口访问移动到另一个线程上,并假定是您的代码做的。解决方案是在调用DLL的同一个线程中创建和访问窗口。

这种技术的主要问题是你的UI可能会闪烁。如果你在使用WPF的过程中足够早,你可能想看看D3DImage,如果不是,你现在所做的大部分工作。