找回密码
 加入
搜索
查看: 1391|回复: 1

[AU3基础] 【已解决】循环获取文件夹下大小为0的文件,程序卡死?

[复制链接]
发表于 2021-3-10 10:57:40 | 显示全部楼层 |阅读模式
本帖最后由 cxm23 于 2021-3-10 11:22 编辑

想要循环获取文件夹下大小为0的文件,可是一进入循环后,就停止不了,程序也关不掉,不知有什么解决办法?
#include <File.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 328, 91, 258, 185)

$Btn_start = GUICtrlCreateButton("循环下载", 128, 8, 89, 25)
$Btn_stop = GUICtrlCreateButton("停止", 224, 8, 89, 25)

GUICtrlSetState($Btn_stop, $GUI_DISABLE)
GUICtrlSetState($Btn_start, $GUI_ENABLE)
GUISetState(@SW_SHOW)

Global $ONOFF = 1

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

                Case $Btn_start
                        $ONOFF = 1
                        GUICtrlSetState($Btn_start, $GUI_DISABLE)
                        GUICtrlSetState($Btn_stop, $GUI_ENABLE)
                         While $ONOFF
                                download()
                                 Sleep(30000)
                         WEnd
                Case $Btn_stop
                        $ONOFF = 0
                        GUICtrlSetState($Btn_stop, $GUI_DISABLE)
                        GUICtrlSetState($Btn_start, $GUI_ENABLE)

        EndSwitch
WEnd



Func download()
        $path = "D:\Video"
        Local $file = _FileListToArray($path, "*.mp4", 1)
        If @error Then
                Return
        EndIf

        Local $i
        Local $file0[1]
        Local $n = 0
        For $i = 1 To UBound($file) - 1
                        $size1 = FileGetSize($path & "" & $file[$i])
                        If $size1= 0 Then
                                        $n += 1
                                        redim $file0[$n]
                                        $file0[$n-1] = $file[$i]
                        EndIf
        Next

EndFunc

 楼主| 发表于 2021-3-10 11:21:40 | 显示全部楼层
搜索论坛找到了完美的解决方法,感谢https://www.autoitx.com/thread-4175-2-1.html帖子中的讨论,用TIMERS UDF
#include <GUIConstants.au3>
#include <Timers.au3>
$Form = GUICreate("例子一", 307, 81, -1, -1)
$Button1 = GUICtrlCreateButton("开始", 32, 24, 97, 33, 0)
$Button2 = GUICtrlCreateButton("停止", 176, 24, 97, 33, 0)
GUISetState(@SW_SHOW)
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        Dim $i=0
                        $iTimeProgres4 = _Timer_SetTimer($Form , 500,'fit')
                Case $Button2
                        _Timer_KillTimer($Form, $iTimeProgres4)
                        MsgBox(0,"结果",$i)
        EndSwitch
WEnd

Func fit($hWnd, $iMsg, $iwParam, $ilParam)
        $i += 1
        TrayTip("脚本正在循环中", "目的是第" & $i & "次", 10, 1)
EndFunc
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-17 13:00 , Processed in 0.068991 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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