在本机互操作中控制WPF

Controlling WPF in native interop

本文关键字:控制 WPF 互操作 本机      更新时间:2023-10-16

我正在用本机代码编写一个应用程序,并希望将WPF用于用户界面库。现在,我已经相对容易地完成了互操作,但最终,我正在尝试编写一个本机应用程序,将WPF作为一个库,而不是一个带有一些本机扩展的WPF应用程序。也就是说,我正在寻找一个具有某些质量的互操作解决方案,而这些质量在任何示例中都找不到。

首先,我肯定想写我自己的主循环。我可能会在本机代码中执行任意操作,并且我希望能够在每次迭代中进行轮询。我的应用程序绝对不是一个"在点击某个东西之前睡觉"的应用程序。

其次,我想要控制WPF的能力。我想说的是WPF处理输入的时间。我想说的是它何时渲染。当我这么说的时候,我希望它能让我成为一个萨米人。这是我遇到的更大的问题之一。当然,这些方法必须存在于WPF中,它们只是没有暴露在我能找到的任何地方。

我一直在研究CLR托管,但它似乎没有我想要的那种"直到完成"的东西。即使我打开了一个关键的部分或其他什么,即使是从托管代码中,也没有办法让WPF做你想做的事。

如果我正确理解你的问题,听起来你想为WPF编写自己的主循环/消息泵。我记得不久前在一条消息中读到过这件事。这不是一个完整的答案,但我想知道它是否能为你指明正确的方向。

主题:WPF中的游戏循环?想知道在WPF框架内编写一个自定义的"游戏循环"有多容易。所谓游戏循环,我的意思是在自定义Dispatcher上泵送我自己的事件,这样我就可以控制我的应用程序的帧速率。

答案:你可以写你自己的信息泵。只是不要调用Dispatcher.Run。您需要泵送消息,并且需要根据需要调用ComponentDispatcher.RaiseThreadMessage。使用反射器查看Dispatcher.PushFrame的功能。

当然,这仍然可能不会给你想要的"游戏循环"。。。

来源:http://blogs.msdn.com/b/jaimer/archive/2009/06/29/wpf-discussions-090626.aspx

我想您应该看看HwndSource。它作为win32控件托管一个WPF GUI。不过,这一切都有点棘手,您最好编写一个简单的WPF.net GUI应用程序,并使用它来使用某种形式的互操作驱动您的本地代码。MS真的没有想过这种迁移方法(重用现有代码并在上面添加一个新的GUI),而是让我们重写所有代码。

网上有很多例子。祝你好运

PS。当然,您可以在原生GUI中尝试当前的"黄金标准"-Qt。