为什么应用程序.当我的表单托管在MFC应用程序中时,Idle永远不会触发



我正在为MFC应用程序构建一个。net插件。我用WinForms和。net创建了一个表单。在用户单击MFC应用程序中的按钮后显示表单。我的一个控件使用Application。闲下来做点事。

问题是,似乎应用程序。闲着不干活。

  • 在这种情况下"应用程序"究竟指的是什么?是整个MFC应用程序,还是。net表单?
  • 为什么不应用程序。闲置的火?


我设法使它工作,这里有两个可能的解决方案:

  • 使用form . showdialog()显示表单(因此表单运行它自己的。net消息泵)
  • 创建一个STA线程,在STA线程上创建表单并调用Application.Run()。然后你可以使用form . show()(表单在创建它的线程中使用。net消息泵,在本例中是。net STA线程)

当Winforms在消息队列中没有找到任何其他消息时,它才能确定应用程序是空闲的。你的问题是,它不是Winforms泵消息循环,它是MFC。它根本不知道温弗特家的事。其他出错的地方,注意选项卡和快捷键不再工作,也由Winforms消息循环处理。

没有明确的解决方案,只能有一个主人。非常不完美的修复是使用Form.ShowDialog()并启动一个新的STA线程,以便您可以调用Application.Run()。

.net表单不是。net应用程序,MFC应用程序也不是。net应用程序。MFC有自己的代码,它在应用程序空闲时调用;它不知道Application.Idle

最新更新