我有一个使用C# (FFx 3.5)编写的应用程序,可以加载DLL作为插件。这些插件在单独的AppDomain中加载(由于许多良好的原因,这个架构不能更改)。目前看来一切都很好。
现在,我有一个要求需要从其中一个插件显示对话框。请注意,我不能将对话框表单返回到主应用程序并在那里显示它(当前基础架构不支持)。
失败1
在我的DLL中,我创建了一个表单并调用了Show方法。对话框轮廓出现了,但没有绘制,并且不响应鼠标事件。我认为这是因为DLL位于单独的AppDomain中,应用程序的消息泵无法向新表单分派消息。
失败2
在我的DLL中,我创建了一个表单并调用了ShowDialog方法,这应该会为对话框创建一个内部消息泵。对话框被显示并响应点击(万岁),但似乎主应用程序不再处理或分派窗口消息,因为它停止绘制并且不再响应鼠标事件。由于某种原因,现在似乎主应用程序的消息泵没有分派。
失败3
在我的DLL中,我创建了一个表单并调用了Application.Run。这肯定会创建一个完整的第二个消息泵。我得到了与故障2相同的行为-对话框表现良好,但是调用应用程序不会。
有什么想法可以解决这里发生的情况以及如何显示来自其他AppDomain的DLL的对话框,并使调用方和被调用方仍然正确响应和绘制?
现在,我有一个要求需要从其中一个插件显示对话框。请注意,我不能将对话框表单返回到主应用程序并在那里显示它(当前基础架构不支持)。
失败1
在我的DLL中,我创建了一个表单并调用了Show方法。对话框轮廓出现了,但没有绘制,并且不响应鼠标事件。我认为这是因为DLL位于单独的AppDomain中,应用程序的消息泵无法向新表单分派消息。
失败2
在我的DLL中,我创建了一个表单并调用了ShowDialog方法,这应该会为对话框创建一个内部消息泵。对话框被显示并响应点击(万岁),但似乎主应用程序不再处理或分派窗口消息,因为它停止绘制并且不再响应鼠标事件。由于某种原因,现在似乎主应用程序的消息泵没有分派。
失败3
在我的DLL中,我创建了一个表单并调用了Application.Run。这肯定会创建一个完整的第二个消息泵。我得到了与故障2相同的行为-对话框表现良好,但是调用应用程序不会。
有什么想法可以解决这里发生的情况以及如何显示来自其他AppDomain的DLL的对话框,并使调用方和被调用方仍然正确响应和绘制?