代码之家  ›  专栏  ›  技术社区  ›  Ben

使用process.waitForExit()时线程被中止错误

  •  1
  • Ben  · 技术社区  · 15 年前

    下面的代码是从while循环中调用的,所以它在一行中执行了多次。有时,但并非总是,我最终得到的线程在p.waitforexit()上被中止错误。有人对此有什么见解吗?我应该在p.waitforexit之后调用p.close()吗?

    string outputFileName = Path.Combine(Path.GetDirectoryName(recordingFileName), Guid.NewGuid() + ".mpg");
            ProcessStartInfo startInfo = new ProcessStartInfo(ffmpegfileName);
            startInfo.Arguments = "-i \"" + recordingFileName + "\" -r 30 -sameq \"" + outputFileName + "\"";
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            Process p = Process.Start(startInfo);
            p.WaitForExit();
            if (p.ExitCode != 0)
            {
                throw new Exception("exited with an exit code of " + p.ExitCode.ToString(CultureInfo.InvariantCulture) + ".");
            }
            return outputFileName;
    
    Thread was being aborted.
    mscorlib
     at System.Threading.WaitHandle.WaitOneNative(SafeWaitHandle waitHandle, UInt32 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
     at System.Threading.WaitHandle.WaitOne(Int64 timeout, Boolean exitContext)
     at System.Diagnostics.Process.WaitForExit(Int32 milliseconds)
     at System.Diagnostics.Process.WaitForExit()
    1 回复  |  直到 12 年前
        1
  •  3
  •   John Lemp Chris Heald    15 年前

    如果您是从ASP.NET页调用它,那么您看到的异常很可能是由于您在该页的请求上点击了执行超时而导致的,并且该页正在被中止。该错误出现在p.waitforexit()行上,因为在您的ASP.NET页等待您开始返回的进程时,该页所在的位置。可以更改ASP.NET应用程序的Web配置文件中的默认执行超时(2.0中的110秒)。

    <httpRuntime  executionTimeout = "600" >
    

    或仅通过该页中的代码:

      HttpContext.Current.Server.ScriptTimeout
    

    http://msdn.microsoft.com/en-us/library/e1f13641.aspx