问题描述
|
Visual Studio,C ++,表单应用程序
(我是Visual C ++的新手)
我有一个带有按钮的应用程序,该按钮的功能非常复杂,大约需要一分钟才能完成。
另外:只要该函数运行,程序就不会响应。在this-> Refresh();中更新窗口。被称为,但是当我单击窗口中的某个位置时,它甚至都不再更新。该功能将继续运行,直到完成其工作,然后一切恢复正常。
我希望能够单击一个“停止”按钮。
我怎么做?
解决方法
答案是多线程...如果您的应用程序只有一个线程,并且正忙于执行计算,那么它将无法做其他事情,例如更新UI或处理事件(\“ Stop \”按钮)
, 这是因为Windows程序的主线程运行消息泵(它执行类似绘制屏幕的操作),并且只要您的函数运行,就阻止了该事件的发生。您需要做的是启动一个执行您长期运行的任务的线程,当任务完成时,您可以发回到主线程以更新UI。我多年没有做过Windows编程,但是从我记忆中这是非常普遍的模式。