关于取DOS执行结果,编辑框内容重复的问题!

来源:百度文库 编辑:神马文学网 时间:2024/04/29 04:32:10

关于取DOS执行结果,编辑框内容重复的问题!

我想写一个程序,其中需要取DOS执行结果,于是我调用了一个取DOS执行结果的易模块.可是这个易模块有一点问题,那就是编辑框中的内容会出现重复,这是取DOS执行结果的易模块中的一部份代码:

.判断循环首 (len ≠ -1)  ' 制造一个无限循环
    PeekNamedPipe (hRead, 0, 0, 0, len, 0)  ' 查看管道中是否有数据
    .如果 (len ≠ 0)
        txt = 取空白字节集 (1024)
        ReadFile (hRead, txt, 1023, len, 0)  ' 从管道中读取数据
        编辑框1.内容 = 编辑框1.内容 + 取字节集数据 (txt, #文本型, )
    .否则
        GetExitCodeProcess (PROCESS_INFORMATION.hProcess, EXIT)  ' 查看指定进程是否已结束
        .如果真 (EXIT ≠ #STILL_ACTIVE)  ' 因为会有程序退出来了,但管道中还有数据的情况,所以必须在管道中没有数据的情况下判断程序是否已结束,这时才能中止循环!
            CloseHandle (hRead)  ' 关闭管道
            跳出循环 ()
        .如果真结束

    .如果结束
    处理事件 ()
    输出调试文本 (到文本 (len))
.判断循环尾 ()

大家看这句子:
编辑框1.内容 = 编辑框1.内容 + 取字节集数据 (txt, #文本型, )
是不是有重复?当然,如果管道中的数据比较小,那么我们是看不出重复的内容,如果管道中的数据比较多,那么就出现了重复的内容,因为我在程序中要执行的DOS命令比较特别,执行过程长达3分钟,显示的执行数据很大,所以编辑框中的内容就重复,而且显示比较慢, 不能和传统DOS窗口中的数据同步.
如果把代码改成:"编辑框1.内容 =取字节集数据 (txt, #文本型, )"的话,那内容重复的问题就解决了,但新的问题又出现了,那就是编辑框不能保存数据,当管道中的数据没有了的时候,编辑框中的内容也就没有了,不可能从管道中读取数据,然后保存在文件中,再读入文本到编辑框吧?这样做就没有意义了.
如果把代码改成:"编辑框1.加入文本(取字节集数据 (txt, #文本型, ))"的话,那内容重复的问题就解决了,编辑框不能保存数据的问题也解决了,但问题又再出现,那就是显示执行结果很慢,不能和传统DOS窗口中的数据同步.我查过易语言知识库,说用"编辑框.加入文本"命令,就等于电脑自动打字,速度相对于"编辑框1.内容 =XXX"这样的赋值语句,就显得慢了很多.