我有一个运行外部命令行实用程序并读取标准输出(PNG图像)的程序。最初在测试期间,我让命令行程序将图像写入临时文件,然后将文件加载到该程序。我有一个Process.Exited的处理程序,如果退出代码非零,则会抛出异常。我在加载临时映像之前调用了WaitForExit以确保进程完成。如果引发异常,则会在读取临时映像文件的代码中处理该异常。现在,我调用Process.Start直接创建图像文件,如果没有错误,它可以正常工作。如果外部程序异常退出,则退出处理程序抛出的异常不再被我的代码捕获。如果我在读取标准输出之前调用WaitForExit,程序将挂起。有没有办法在不调用WaitForExit的情况下捕获退出处理程序抛出的异常?
答案 0 :(得分:0)
听起来像命令行实用程序没有正常退出。您是否通过显示进程窗口来检查它是否正在执行某些不正确的操作?
我的第二个赌注是不读取标准输出导致程序不退出(它等待能够清除它的输出),因此您必须首先读取标准输出,然后等待实用程序停止
答案 1 :(得分:0)
Process.Exited处理程序在上下文中执行,该上下文与启动进程的函数分开。你可以用两种方法解决这个问题。