我有一个将 DLL 作为插件加载的 C# (FFx 3.5) 应用程序。这些插件加载在单独的 AppDomain 中(有很多很好的理由,而且这种架构不能改变)。这一切都很好。
我现在需要从其中一个插件中显示一个对话框。请记住,我无法将对话框表单返回到主应用程序并在那里显示(当前的基础架构不支持它)。
失败1
在我的 DLL 中,我创建了一个名为 Show 的表单。对话框轮廓出现但没有绘制,并且它不响应鼠标事件。我认为这是因为 DLL 位于单独的 AppDomain 中,并且应用程序的消息泵不知何故无法将消息发送到新表单。
失败2
在我的 DLL 中,我创建了一个名为 ShowDialog 的表单,它应该为对话框创建一个内部消息泵。对话框显示并响应点击(万岁),但似乎主应用程序不再处理或调度 windows 消息,因为它退出绘画并且不再响应鼠标事件。由于某种原因,现在似乎主应用程序的消息泵没有发送。
失败 3
在我的 DLL 中,我创建了一个名为 Application.Run 的表单。这肯定会创建一个完整的第二个消息泵。我得到了与失败 2 相同的行为 - 对话框的行为,但调用应用程序没有。
关于这里到底发生了什么以及我如何从另一个 AppDomain 的 DLL 中显示一个对话框并让调用者和被调用者仍然响应并正确绘制的任何想法?