【发布时间】:2011-11-19 20:55:50
【问题描述】:
我有一些工作,但我不确定它是否正常以及以后是否会导致问题。
我有一个 Win32 C++ 应用程序,它进行一些视频处理并使用 Direct3D 进行显示(不是我的代码)。我的任务是用 C# GUI 替换 GUI。
我已将 C++ 代码制成 dll。 我在 C# 中创建了一个 GUI,并有一个用于视频显示的面板。我将此面板的 HWND 传递给 dll,一切似乎都运行良好。
但是 - 该面板正在被创建它的线程以外的线程访问,这是不应该的。
我的一部分想要“独自离开”,但这感觉不对,我怀疑这会导致问题。比如当我们想在面板上捕捉点击事件时,这将在主线程或 UI 线程上......创建面板。
关于我应该如何做到这一点的任何建议? 谢谢 谢谢
【问题讨论】:
-
也许让 C++ 代码创建自己的 HWND,它是 Panel 的子级(而不是尝试直接使用 Panel HWND)——然后你可以随意使用它。 (如果面板在其生命周期内改变了大小,您可能需要将 C# 代码 P/Invoke 转换为 C++ 以让它知道它应该适当地调整大小 - 但这很简单,可以跨线程使用 SetWindowPos。)
标签: c# winapi dll direct3d ui-thread