Почему Application.Idle никогда не запускается, когда моя форма размещается в приложении MFC?

Я строю плагин.net для приложения MFC. Я создал форму, используя WinForms и.net4. Форма отображается после того, как пользователь нажимает кнопку в приложении MFC. Один из моих элементов управления использует Application.Idle для выполнения какой-либо задачи.

Проблема, кажется, Application.Idle никогда не запускается.

  • Что именно означает "Приложение" в этом сценарии? Это целое приложение MFC или форма.net?
  • Почему не работает Application.Idle

ОБНОВИТЬ
Мне удалось заставить его работать, вот два возможных решения:

  • показать форму с помощью Form.ShowDialog() (таким образом, форма запускает собственный насос сообщений.net)
  • создайте поток STA, создайте форму в потоке STA и вызовите Application.Run(). Затем вы можете использовать Form.Show() (форма использует насос сообщений.net в потоке, в котором она была создана, в данном случае: поток.net STA)

2 ответа

Решение

Единственный способ, которым Winforms может выяснить, что приложение бездействует, - это когда оно не находит никаких других сообщений в очереди сообщений. Ваша проблема в том, что не Winforms качает цикл сообщений, это MFC. Который ничего не знает о колокольчиках и свистах Винформ. Другие вещи идут не так, как надо, обратите внимание, что табуляции и сочетания клавиш больше не работают, что также обрабатывается циклом сообщений Winforms.

Чистого решения для этого не существует, может быть только один мастер. Очень несовершенные исправления используют Form.ShowDialog() и запускают новый поток STA, чтобы вы могли вызывать Application.Run().

Форма.net не является приложением.net и не является приложением MFC. MFC имеет свой собственный код, который он вызывает в приложении, когда он находится в режиме ожидания; у него нет знаний о приложении.

Другие вопросы по тегам