![]() |
1
12
首先我将解释消息循环如何在互操作场景中工作,然后我将回答您的问题并给出一些建议。 场景中的消息循环实现
您的场景涉及三种不同的技术:vb6、WinForms和WPF。这些技术中的每一种都是在Win32之上实现的。每个人都有自己的想法
这里是每个
WPF应用程序对象是可选的 您的问题假设WPF在应用程序对象中实现了消息循环。事实并非如此。在WPF中,WinForms在应用程序对象中处理的所有基本函数都被移动到其他对象,如Dispatcher、HwndSource、InputManager、KeyboardDevice、MouseDevice等。 在WPF中,Application对象是完全可选的。您可以使用复杂的UI构建完整的WPF应用程序,而无需创建应用程序对象。应用程序对象仅在您需要它提供的服务之一时才有用,例如:
应用程序类还提供了几个有用的静态成员,例如
当你打电话的时候
所有实际的消息循环功能都在
这个
要从WPF的Dispatcher注册未处理的异常,您只需执行以下操作:
WPF不仅可以在不创建应用程序对象的情况下运行,还可以在不创建应用程序对象的情况下运行
事实上,当你使用
因此,您的WPF异常处理程序可能不会被调用。相反,您需要在vb6或WinForms级别安装异常处理程序。
在这个场景中,是否创建了WPF应用程序对象?
如果不是,是什么导致消息被抽取? vb6正在传输消息。 如果我在后台线程上启动应用程序对象会发生什么?
建议 从您询问的情况来看,在加载WPF控件的过程中,似乎遇到了一个未处理的异常,您希望捕获该异常。在这种情况下,最好的计划可能是将WPF控件包装在一个简单的ContentControl中,其构造函数使用如下代码来构造子控件:
工作原理:BeginInvoke延迟子级的构造,直到vb6和/或InteropControl完成所有处理。创建子控件后的Invoke调用以低优先级调用空操作,导致所有挂起的DispatcherOperations完成。
|
![]() |
2
3
在WPF中
|
![]() |
JOO · 使用udpClient从多个IP地址连续接收数据 2 年前 |
![]() |
Futterkiste · 函数比例图 2 年前 |
![]() |
user18789895 · 我应该如何验证WinForms应用程序? 2 年前 |
![]() |
beriscen · 如何使整个链接标签区域可点击? 2 年前 |
![]() |
lpmaxim · 当鼠标光标悬停在按钮上时,背景图像会移动 2 年前 |