qinylj 发表于 2012-9-23 15:59:12

为什么会多执行一次

本帖最后由 qinylj 于 2012-9-23 16:00 编辑

今天做了一个控制VPN登陆地东西,代码如下Do
        ControlCommand("BJVPN", "登录", "", "SetCurrentSelection", Random(1, $BDcommentreply_VPN_Combobox - 1, 1))
        ControlClick("BJVPN", "登录", "", "left", 1)
        WinWait("Ping", "关闭")
        Sleep(2000)
        $BDcommentreply_VPN_Testtext = StringInStr(ControlGetText("Ping", "关闭", ""), "time=")
;~ WinKill("Ping", "关闭")
Until $BDcommentreply_VPN_Testtext > 0ControlCommand那段代码是随机设置Combobox的项目
接下来就是点击 测试 按钮
然后等待窗口出现
之后通过判断Edit中是否含有time=来结束循环
但是只要把注释出的代码换成winclose或controlclick或者winkill等就会多弹出来一次,困扰我一个下午了,哎。

user3000 发表于 2012-9-23 17:41:11

回复 1# qinylj
没条件进行具体测试, 只能给出点建议:
无论是那种循环语法, 如果其运行次数不对时, 都应该跟踪它条件变量, 以检查出错的'环节', 所以你要检查 $BDcommentreply_VPN_Testtext 在每次循环中的值! 最好用 ConsoleWrite 作输出, 这样不怎么影响程序的效率和执行的通畅性.

nivisde 发表于 2012-9-23 23:13:51

我想你应该找找帮助文件看看Do until 的具体用法

魔导 发表于 2012-9-23 23:19:34

你写的结束条件    跟   你想要的结束条件    有差距~~~

qinylj 发表于 2012-9-24 08:56:55

回复 2# user3000


    我试过用Consolewrite写的,如果里面包含了time=的时候返回的是一个数字,就是time=的位置
但是,这个时候Ping窗口依然会弹出两次,后来我把do until循环去掉之后,同样的问题出现了,依旧会两次弹出ping窗口......

qinylj 发表于 2012-9-24 08:59:26

回复 3# nivisde


    如果问题真的那么简单我就不会问了......
    我想你还没看懂我的问题......出现问题是因为把注释的那行代码加上了......

qinylj 发表于 2012-9-24 09:01:35

回复 4# 魔导


    同三楼一样,Do until循环没有任何问题,我把注释那段代码加上就会出现多弹一次窗口的问题,把那行代码去掉后就一切正常了......

魔导 发表于 2012-9-24 12:51:12

回复 7# qinylj


    好吧- -!那就注释掉那行用吧~~~
页: [1]
查看完整版本: 为什么会多执行一次