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

Я создаю плагин .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 ]

2 голосов
/ 30 сентября 2011

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

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

1 голос
/ 30 сентября 2011

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

...