我有一个标准的查找对话框:
我的程序可以处理一些非常大的文件,在这些文件中查找文本可能需要10或20秒或更长时间。因此,在按下“查找下一个”按钮后,我将光标更改为沙漏。在找到或找不到文本后,我将其更改回标准指针。
我的问题是用户可能决定取消搜索并决定按取消按钮。然后取消按钮关闭对话框,但搜索在FindDialogFind例程中继续,直到找到或找不到文本。
我在从FindDialog.exe退出时设置了一个断点,但是在FindDialogFind完成之前它没有到达。
有没有什么方法可以捕捉到按下取消按钮的事实,这将允许我打破FindDialogFind循环,或者是否有更好的方法在按下取消按钮时停止搜索?
答案 0 :(得分:4)
在OnClose
组件的TFindDialog
事件中,设置一个布尔变量FAbortSearch
。
在搜索例程中经常检查此var,如果设置则中止。
答案 1 :(得分:1)
将搜索逻辑移动到按下Next
按钮时启动的工作线程。关闭对话框后,如果线程仍在运行,则可以终止该线程。