如何:通过使用 ShowDialog 方法显示 Windows 窗体来支持 COM Interop
更新:2007 年 11 月
可以通过在 .NET Framework 消息循环(它通过使用 Application.Run 方法创建)上显示 Windows 窗体,来解决组件对象模型 (COM) 互操作性的问题。
若要使窗体在 COM 客户端应用程序中正常工作,必须在 Windows 窗体消息循环上运行该窗体。若要实现这一点,请使用下列方法之一:
使用 Form.ShowDialog 方法显示 Windows 窗体;
在单独的线程上显示每个 Windows 窗体。有关更多信息,请参见 如何:通过在每个 Windows 窗体各自的线程上显示该 Windows 窗体来支持 COM Interop。
在 .NET Framework 组件的新线程上创建一个共享的消息循环。有关更多信息,请参见 如何:通过在共享线程上显示 Windows 窗体来支持 COM Interop。
过程
使用 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 互操作
- 用对 .NET Framework 组件中的 Form.ShowDialog 方法的调用来替换所有对 Form.Show 方法的调用。
请参见
任务
如何:通过在每个 Windows 窗体各自的线程上显示该 Windows 窗体来支持 COM Interop
如何:通过在共享线程上显示 Windows 窗体来支持 COM Interop