我正在为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