Почему 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 имеет свой собственный код, который он вызывает в приложении, когда он находится в режиме ожидания; у него нет знаний о приложении.