1

我正在为 MFC 应用程序构建一个 .net 插件。我使用 WinForms 和 .net4 创建了一个表单。该表单在用户单击 MFC 应用程序中的按钮后显示。我的一个控件使用 Application.Idle 来完成一些任务。

问题是,似乎 Application.Idle 从未被解雇。

  • 在这种情况下,“应用程序”到底指的是什么?是整个 MFC 应用程序,还是 .net 表单?
  • 为什么 Application.Idle 不触发?

更新
我设法让它工作,这里有两种可能的解决方案:

  • 使用 Form.ShowDialog() 显示表单(因此表单运行自己的 .net 消息泵)
  • 创建一个 STA 线程,在 STA 线程上创建表单并调用 Application.Run()。然后你可以使用 Form.Show() (表单在它创建的线程中使用 .net 消息泵,在这种情况下:.net STA 线程)
4

2 回答 2

2

Winforms 可以确定应用程序处于空闲状态的唯一方法是在消息队列中找不到任何其他消息时。您的问题是不是 Winforms 泵送消息循环,而是 MFC。它对 Winforms 的花里胡哨一无所知。其他事情出错了,请注意制表键和快捷键不再起作用,也由 Winforms 消息循环处理。

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

于 2011-09-29T22:48:41.247 回答
1

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

于 2011-09-29T22:36:08.840 回答