【问题标题】:Code keeps running after Process.WaitForExit has been used使用 Process.WaitForExit 后代码继续运行
【发布时间】:2020-08-18 11:40:53
【问题描述】:

我目前正在尝试写GUI around

首先我运行一个命令来开始图像的实际转换。 使用该方法后,我想通过MoveFile() 将转换后的文件移动到另一个文件夹。

问题是程序没有等待 CMD 进程完成,而是想立即移动文件。当我调试程序并真正让它完成 CMD 命令时,文件将被毫无问题地移动。

从在线阅读我需要使用.WaitForExit(),但它似乎没有多大作用。

RunCommand(strCommand);
MoveFile(strDirectoryName + "\\" + strNewName, strDirectoryName + "\\0 - Preview\\" + strNewName);

RunCommand()

private void RunCommand(string CmdText) {
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            //startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.FileName = "cmd.exe";
            startInfo.Arguments = "/c " + CmdText;
            process.StartInfo = startInfo;
            process.Start();
            process.WaitForExit();
        }

有帮手吗?

【问题讨论】:

  • 可以查看文件是否被锁定。
  • 不确定您的意思是什么文件?然而,就像我说的,当我调试它并逐步进行时,它可以工作。它可以转换文件并移动它当我刚刚运行它时,它给了我一个错误,即 MoveFile 方法找不到文件,因为它尚未创建。
  • 也许检查 Process.HasExited 是否被触发?

标签: c#


【解决方案1】:

发现问题。

必须在 CMD 命令的实际完成和文件的移动之间放置一个小 Thread.Sleep。

【讨论】:

    【解决方案2】:

    您有两种简单的方法可以做到这一点: var1:你可以使用静态方法

    Process.Start(your_file, your_args).WaitForExit();
    

    var2:使用 Exited 事件。

    var p = new Process() { EnableRaisingEvents = true };
    p.StartInfo.FileName = your_file;
    p.StartInfo.Arguments = your_args;
    p.Exited += (sender, e) =>
                    {
                       your_next_step
                    };
    p.Start();
    

    在 P_Exited 上你可以编写下一步

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2021-11-03
      • 2012-04-26
      相关资源
      最近更新 更多