这个问题类似于ShellExecute的大多数问题,但有一个例外:我想使用ShellExecute,因为它使用起来很简单,并且可以使用许多编程语言中的几行来调用它,包括现在已经落伍的Visual FoxPro。
大多数现有的解决方案依赖于使用线程进行处理,查找进程(如果它是常见的进程名称则不可靠)或使用的ShellExecuteEx要复杂得多。我对那里的其他解决方案不满意。
问题是我有一个文件操作需要几秒钟才能完成:解压缩存档。我怎么知道我已经完成了?
答案 0 :(得分:0)
解决方案是从正在执行的命令中创建semaphore。这可以通过运行批处理文件来完成,但如果不需要,还可以使用cmd.exe以单行方式处理它:
ShellExecute(0, 'open', 'cmd.exe', '/c 7z.exe e Invoices.zip | find "Everything is Ok" > semaphore.txt', workingDirectory, 1)
这个单线程使用CMD将7zip的输出传递给Find,它查找指示完成的文本行。当然,如果出现错误,则会失败。
如果您没有输出等待(用于管道进入FIND),您可以使用&如此回应:
... & echo > semaphore.txt
这等待直到...完成,然后回显到semaphore.txt的换行符。
最后,您的工作目录中会有一个semaphore.txt文件。您所要做的就是查找要显示的文件,并且您知道执行已完成。删除此文件并继续您的程序。