【发布时间】:2016-05-02 17:52:22
【问题描述】:
对于我的项目,我将 C# UI 和 C++ DLL 组合用作“worker”。 我的应用程序使用 Irrlicht 引擎进行渲染。我的 C# 窗口中的面板用作场景的容器。
目前我正在为鼠标交互实现一个事件接收器。我的问题,C++ 代码不接收事件。
我解决了核心问题:我使用了 rende 循环,C++ 代码必须有机会捕获事件。对于这个循环,我必须使用线程,否则我的 C# 窗口会被冻结。现在的问题是,事件不会发送到我的接收器,因为事件来自另一个线程。
Irrlicht 系统消息处理程序
if (msg.hwnd == HWnd) //My issue msg.hwnd = Main Thread HWnd = Render Thread
{
WndProc(HWnd, msg.message, msg.wParam, msg.lParam); //On this way my event receiver would get the event.
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
现在我必须找到一个解决方案,我如何能够连续地从主线程渲染和转发事件到渲染线程。
我目前的工作是肮脏的方式:
C# 代码
while (!RenderStop) //bool to stop this loop
{
MyDll.RenderScene(); // Calculate and redraw changes
Application.DoEvents();
}
这不是什么好方法,但是这样我得到了一个假的并行性,并且事件到达了我的 DLL。
Ps。所有事件都只是简单的 MouseMove 或 Click 事件。
【问题讨论】:
标签: c# c++ multithreading events dll