可通过在 .NET Framework 消息循环上显示 Windows 窗体来解决组件对象模型 (COM) 互操作性问题,可使用 Application.Run 方法来创建该消息循环。
若要使表单在 COM 客户端应用程序中正常工作,必须在 Windows 窗体消息循环上运行它。 为此,请使用以下方法之一:
使用 Form.ShowDialog 方法显示 Windows 窗体;
在单独的线程上显示每个 Windows 窗体。 有关更多信息,请参见如何:通过在每个 Windows 窗体各自的线程上显示该 Windows 窗体来支持 COM 互操作。
程序
使用 Form.ShowDialog 方法可能是在 .NET Framework 消息循环上显示窗体的最简单方法,因为所有方法都需要实现最少的代码。
Form.ShowDialog 方法挂起非托管应用程序的消息循环,并将窗体显示为对话框。 由于宿主应用程序的消息循环已挂起,Form.ShowDialog 方法创建新的 .NET Framework 消息循环来处理该窗体的消息。
使用 Form.ShowDialog 方法的缺点在于,窗体将会以模态对话框的形式打开。 Windows 窗体打开时,此行为将阻止调用应用程序中的任何用户界面 (UI)。 当用户退出表单时,.NET Framework 消息循环将关闭,而早期应用程序的消息循环将再次开始运行。
在 Windows 窗体中,您可以创建一个类库,该类库中包含一个用于显示窗体的方法,然后构建该类库以支持 COM 互操作性。 可以从 Visual Basic 6.0 或 Microsoft 基础类(MFC)使用此 DLL 文件,并从其中任一环境调用 Form.ShowDialog 方法来显示窗体。
通过使用 ShowDialog 方法显示 Windows 窗体来支持 COM 互操作
- 将对 Form.Show 方法的所有调用替换为对 .NET Framework 组件中 Form.ShowDialog 方法的调用。
另请参阅
- 向 COM 公开 .NET Framework 组件
- 如何:通过在每个 Windows 窗体各自的线程上显示该 Windows 窗体来支持 COM 互操作
- Windows 窗体和非托管应用程序