如何实现两个While循环同时执行 - 已解决
本帖最后由 JianWudao 于 2017-6-30 17:20 编辑想同时执行两个While循环,同时监听两种类别事件。
托盘事件TrayGetMsg ( )需要一个While去一直监听,然后GUI主界面上也有按钮需要While一直去监听。
但是只能使用一个While,无法两个同时执行。
求帮助,谢谢! 回复 1# JianWudao
While只能有一個
監聽 事件不一定要用WHILE 去做
你的思考 邏輯有問題
請說明 你要做的事情是甚麼.... 回复 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 回复 3# JianWudao
參考 一下 說明書的
TrayItemSetOnEvent範例
托盤的事情 跟反應可以用 事件 註冊
有人按鈕個 就會自動呼叫 函數處理 回复 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
回复 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
這樣不就好了 回复 5# JianWudao
大哥
那個 while是為了不退出程式所存在的
就跟你原本的WHILE 一樣的存在意義
還是不懂 就請上 程式碼' 回复 6# kk_lee69
去先测试一下,谢谢! 回复 7# kk_lee69
呃……不好意思,没反应过来。
懂了,知道那个While的作用了。
本来我之前也是想的,像你举的这个例子这样做,结果走到坑里面去了。
现在初步测试成功,正在加入我的工程里面做进一步测试,谢谢! 回复 9# JianWudao
問題解決了 別忘了修改標題
注意版規 回复 10# kk_lee69
已经测试OK,谢谢!
至此,结帖! 回复 10# kk_lee69
论坛就需要你这样的热心人,赞一个! 论坛就需要你这样的热心人,赞一个! 回复 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]