Практическое руководство. Обеспечение поддержки COM-взаимодействия путем отображения формы Windows Forms с помощью метода ShowDialog
Проблемы COM-взаимодействия можно устранить путем отображения формы Windows Forms в цикле сообщений .NET Framework , который создается с помощью метода Application.Run .
Чтобы исправить работу формы из клиентского приложения COM, необходимо запустить его в цикле сообщений Windows Forms. Для этого воспользуйтесь одним из перечисленных ниже подходов.
Используйте метод Form.ShowDialog для отображения формы Windows Forms.
Отображайте каждую форму Windows Forms в отдельном потоке. Дополнительные сведения см. в разделе Как Поддержка COM-взаимодействия путем отображения каждой формы Windows Forms в отдельном потоке.
Процедура
Использование метода Form.ShowDialog может оказаться самым простым способом для отображения формы в цикле сообщений .NET Framework , так как он требует меньше всего кода.
Метод Form.ShowDialog приостанавливает цикл сообщений неуправляемого приложения и отображает форму в виде диалогового окна. Поскольку цикл сообщений ведущего приложения приостановлен, метод Form.ShowDialog создает новый цикл сообщений .NET Framework для обработки сообщений формы.
Недостатком использования метода Form.ShowDialog является то, что форма будет открыта как модальное диалоговое окно. Такое поведение блокирует любой пользовательский интерфейс в вызывающем приложении, пока открыта форма Windows Forms. Когда пользователь выходит из формы, цикл сообщений .NET Framework закрывается, и снова начинает выполняться более ранний цикл сообщений приложения.
Можно создать библиотеку классов в Windows Forms, которая содержит метод для отображения формы, а затем выполнить сборку библиотеки классов для COM-взаимодействия. Можно использовать этот DLL-файл из Visual Basic 6.0 или Microsoft Foundation Classes (MFC) — вызвать метод Form.ShowDialog для отображения формы можно из любой из этих сред .
Обеспечение поддержки COM-взаимодействия путем отображения формы Windows Forms с помощью метода ShowDialog
- В своем компоненте Form.Show замените все вызовы метода Form.ShowDialog на вызовы метода .NET Framework .