Bläddra i källkod

More robust handling of FXC process waiting.

Eric Mellino 8 år sedan
förälder
incheckning
efd56f9408
1 ändrade filer med 8 tillägg och 4 borttagningar
  1. 8 4
      src/ShaderGen.App/Program.cs

+ 8 - 4
src/ShaderGen.App/Program.cs

@@ -284,17 +284,21 @@ namespace ShaderGen.App
                 ProcessStartInfo psi = new ProcessStartInfo(fxcPath, args);
                 psi.RedirectStandardOutput = true;
                 psi.RedirectStandardError = true;
-                Process p = Process.Start(psi);
-                p.WaitForExit();
+                Process p = new Process() { StartInfo = psi };
+                p.Start();
+                var stdOut = p.StandardOutput.ReadToEndAsync();
+                var stdErr = p.StandardError.ReadToEndAsync();
+                bool exited = p.WaitForExit(2000);
 
-                if (p.ExitCode == 0)
+                if (exited && p.ExitCode == 0)
                 {
                     path = outputPath;
                     return true;
                 }
                 else
                 {
-                    throw new ShaderGenerationException(p.StandardError.ReadToEnd());
+                    string message = $"StdOut: {stdOut.Result}, StdErr: {stdErr.Result}";
+                    Console.WriteLine($"Failed to compile HLSL: {message}.");
                 }
             }
             catch (Win32Exception)