zhang_jf 发表于 2022-8-31 12:00:33

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

请教一个问题,窗口情况下 按钮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


afan 发表于 2022-8-31 19:25:17

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

一般都需要在耗时的循环体中判断退出。不过此类需求建议最好使用事件模式。

afan 发表于 2022-8-31 12:56:42

                If GUIGetMsg() = $hButton2 Then Return Stop()
;~                 If $Stop = 1 Then Return 1

zhang_jf 发表于 2022-8-31 12:02:17


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

zhang_jf 发表于 2022-8-31 16:47:19

afan 发表于 2022-8-31 12:56


谢谢帮助,目前可以通过这种方式解决。

zhang_jf 发表于 2022-8-31 16:56:31

afan 发表于 2022-8-31 12:56


如果子程序里面有阻断,或者是嵌套的循环,除了每个循环里面添加一次 Return 我可以通过其他的方法来退出这个子进程嘛{:1_578:}

Func Label_Ran()
       
        While 1
                GUICtrlSetData($hLabel,Random(1,100))
                Sleep(10)
                MsgBox(1,1,1)
                If GUIGetMsg() = $hButton2 Then Return 1
        WEnd
EndFunc
页: [1]
查看完整版本: 主窗口按钮触发func子程序循环的时候,是否可以在主窗口添加一个按钮用于退出子程