找回密码
 加入
搜索
查看: 597|回复: 5

[AU3基础] 主窗口按钮触发func子程序循环的时候,是否可以在主窗口添加一个按钮用于退出子程

[复制链接]
发表于 2022-8-31 12:00:33 | 显示全部楼层 |阅读模式
请教一个问题,窗口情况下 按钮1 调用 子程序1 运行了一段循环操作,这种情况下如何使用 按钮2 去结束 子程序1 的循环


#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("测试", 120, 147, -1, -1)
Local $hButton = GUICtrlCreateButton("运行", 17, 26, 70, 28)
Local $hButton2 = GUICtrlCreateButton("停止", 17, 62, 70, 28)
Local $hLabel = GUICtrlCreateLabel("Label", 17, 103, 70, 15)
GUISetState()

While 1
        $hMsg = GUIGetMsg()
        Switch $hMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $hButton
                        Label_Ran()
                Case $hButton2
                        Stop()
        EndSwitch
WEnd

Func Stop()
        
EndFunc

Func Label_Ran()
        
        While 1
                GUICtrlSetData($hLabel,Random(1,100))
                Sleep(10)
                If $Stop = 1 Then Return 1
        WEnd
EndFunc


发表于 2022-8-31 19:25:17 | 显示全部楼层
zhang_jf 发表于 2022-8-31 16:56
如果子程序里面有阻断,或者是嵌套的循环,除了每个循环里面添加一次 Return 我可以通过其他的方法来退出 ...

一般都需要在耗时的循环体中判断退出。不过此类需求建议最好使用事件模式。
发表于 2022-8-31 12:56:42 | 显示全部楼层
                If GUIGetMsg() = $hButton2 Then Return Stop()
;~                 If $Stop = 1 Then Return 1
 楼主| 发表于 2022-8-31 12:02:17 | 显示全部楼层

这段是无用文本,发帖的时候没有删除。
If $Stop = 1 Then Return 1


 楼主| 发表于 2022-8-31 16:47:19 | 显示全部楼层

谢谢帮助,目前可以通过这种方式解决。
 楼主| 发表于 2022-8-31 16:56:31 | 显示全部楼层

如果子程序里面有阻断,或者是嵌套的循环,除了每个循环里面添加一次 Return 我可以通过其他的方法来退出这个子进程嘛
Func Label_Ran()
        
        While 1
                GUICtrlSetData($hLabel,Random(1,100))
                Sleep(10)
                MsgBox(1,1,1)
                If GUIGetMsg() = $hButton2 Then Return 1
        WEnd
EndFunc
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 11:30 , Processed in 0.075823 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表