JianWudao 发表于 2017-6-30 14:09:02

如何实现两个While循环同时执行 - 已解决

本帖最后由 JianWudao 于 2017-6-30 17:20 编辑

想同时执行两个While循环,同时监听两种类别事件。
托盘事件TrayGetMsg ( )需要一个While去一直监听,然后GUI主界面上也有按钮需要While一直去监听。
但是只能使用一个While,无法两个同时执行。
求帮助,谢谢!

kk_lee69 发表于 2017-6-30 15:03:21

回复 1# JianWudao

While只能有一個

監聽 事件不一定要用WHILE 去做

你的思考 邏輯有問題

請說明 你要做的事情是甚麼....

JianWudao 发表于 2017-6-30 15:42:19

回复 2# kk_lee69


    嗯~我知道While只能有一个。
我在GUI上面用了一个While,来监听按钮事件。
然后又想做个托盘菜单出来,但是托盘菜单通常也是用的While循环,来监听TrayGetMsg()事件。
如果GUI进入了循环,就无法启动托盘的监听;如果进入托盘的循环,就无法监听GUI。
想知道怎么同时监听两种事件。谢谢!

这是GUI界面上的按钮监听While 1
        $Msg = GUIGetMsg()
        Switch $Msg
                Case $Abutton
                        StartA()
                Case $Bbutton
                        StartB()
                Case $GUI_EVENT_CLOSE
                        _AD_Close()
                        Exit
        EndSwitch
WEnd这是托盘菜单的事件监听While 1
      Switch TrayGetMsg()
            Case $idAbout
                MsgBox($MB_SYSTEMMODAL, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
                        "Version: " & @AutoItVersion & @CRLF & _
                        "Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 0, -1) - 1))

            Case $idExit ; Exit the loop.
                ExitLoop
      EndSwitch
WEnd

kk_lee69 发表于 2017-6-30 15:47:43

回复 3# JianWudao


    參考 一下 說明書的

TrayItemSetOnEvent範例

托盤的事情 跟反應可以用 事件 註冊

有人按鈕個 就會自動呼叫 函數處理

JianWudao 发表于 2017-6-30 15:52:49

回复 4# kk_lee69


    看了这个范例的,但是里面还是有用到一个While循环
Func Example()
        TrayCreateItem("About")

        TrayCreateItem("") ; Create a separator line.

        TrayCreateItem("Exit")
        TrayItemSetOnEvent(-1, "ExitScript")

        TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "TrayEvent")
        TraySetOnEvent($TRAY_EVENT_SECONDARYUP, "TrayEvent")

        TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu.

        While 1
                Sleep(100) ; An idle loop.
        WEnd
EndFunc   ;==>Example

Func TrayEvent()
        Switch @TRAY_ID ; Check the last tray item identifier.
                Case $TRAY_EVENT_PRIMARYDOUBLE                       
                        MsgBox($MB_SYSTEMMODAL, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
                                        "Version: " & @AutoItVersion & @CRLF & _
                                        "Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 0, -1) - 1)) ; Find the folder of a full path.

                Case $TRAY_EVENT_SECONDARYUP
                        MsgBox($MB_SYSTEMMODAL, "", "The secondary mouse button was released on the tray icon.")

        EndSwitch
EndFunc   ;==>TrayEvent

kk_lee69 发表于 2017-6-30 15:53:04

回复 3# JianWudao


    註冊
TrayItemSetOnEvent($idAbout, "About")
TrayItemSetOnEvent($idExit, "idExit")

Func About()
                MsgBox($MB_SYSTEMMODAL, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
                        "Version: " & @AutoItVersion & @CRLF & _
                        "Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 0, -1) - 1))
EndFunc   


Func idExit()
   ExitLoop
EndFunc   

這樣不就好了

kk_lee69 发表于 2017-6-30 15:54:43

回复 5# JianWudao

大哥

那個 while是為了不退出程式所存在的

就跟你原本的WHILE 一樣的存在意義

還是不懂 就請上 程式碼'

JianWudao 发表于 2017-6-30 15:55:12

回复 6# kk_lee69


    去先测试一下,谢谢!

JianWudao 发表于 2017-6-30 16:03:01

回复 7# kk_lee69


    呃……不好意思,没反应过来。
    懂了,知道那个While的作用了。
本来我之前也是想的,像你举的这个例子这样做,结果走到坑里面去了。

现在初步测试成功,正在加入我的工程里面做进一步测试,谢谢!

kk_lee69 发表于 2017-6-30 16:49:18

回复 9# JianWudao

問題解決了 別忘了修改標題
注意版規

JianWudao 发表于 2017-6-30 17:21:27

回复 10# kk_lee69


    已经测试OK,谢谢!

    至此,结帖!

wln 发表于 2017-7-2 10:26:36

回复 10# kk_lee69


    论坛就需要你这样的热心人,赞一个!

84063016 发表于 2017-7-6 13:55:45

论坛就需要你这样的热心人,赞一个!

sdycn2012 发表于 2017-7-7 18:41:52

回复 3# JianWudao


    直接把两句合并到一起不就可以了吗?
While 1
      $Msg = GUIGetMsg()
      Switch $Msg
                Case $Abutton
                        StartA()
                Case $Bbutton
                        StartB()
                Case $GUI_EVENT_CLOSE
                        _AD_Close()
                        Exit
      EndSwitch

      Switch TrayGetMsg()
            Case $idAbout
                MsgBox($MB_SYSTEMMODAL, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
                        "Version: " & @AutoItVersion & @CRLF & _
                        "Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 0, -1) - 1))

            Case $idExit ; Exit the loop.
                ExitLoop
      EndSwitch
WEnd
页: [1]
查看完整版本: 如何实现两个While循环同时执行 - 已解决