在C#中使用exe时发生异常 - java

我为Java代码创建了一个exe,并且尝试在C#应用中使用它。我正在这样使用

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "abc.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = args; 

try
{
    // Start the process with the info we specified.
    // Call WaitForExit and then the using statement will close.
    using (Process exeProcess = Process.Start(startInfo))
    {
         exeProcess.WaitForExit();
    }
}
catch (Exception ex)
{
    // Log error.
    MessageBox.Show(ex.Message);
}

在此之后,我读取了exe应该创建的文本文件。

System.IO.StreamReader file =
           new System.IO.StreamReader(textFile);

但是在阅读文本文件“文件正在被另一个进程使用”时,我遇到了异常。

现在,我确定除了exe以外,没有其他进程正在访问该文件。而且我还调用了WaitForExit()方法。但是我还是例外。有谁知道如何解决这个问题?

编辑:
我通过删除文本文件并再次运行代码再次测试了代码,但出现了FileNotFound异常,因此似乎该代码正在尝试读取文件,甚至在exe尚未完成编写之前。我怎样才能强制仅在exe释放文件后才能读取文件?

java参考方案

您正在使用WaitForExit调用来阻止应用程序,从而阻止Windows处理UI事件。我建议将您的代码移到这样的其他方法

编辑:因此,您在运行abc或ebc之后可能没有太快的其他代码。

class Program
{
    private static bool eventHandled;
    private static int elapsedTime;


    static void Main(string[] inputArgs)
    {
        string args = string.Empty;

        try
        {
            Process exeProcess = new Process();
            exeProcess.StartInfo.CreateNoWindow = false;
            exeProcess.StartInfo.UseShellExecute = false;
            exeProcess.StartInfo.FileName = "abc.exe";
            exeProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            exeProcess.StartInfo.Arguments = args;
            exeProcess.EnableRaisingEvents = true;
            exeProcess.Exited +=  OnProcessExited;
            exeProcess.Start();
        }
        catch (Exception ex)
        {
            // Log error.
            Console.WriteLine(ex.Message);
        }

        // Wait for Exited event, but not more than 30 seconds.
        const int SLEEP_AMOUNT = 100;
        while (!eventHandled)
        {
            elapsedTime += SLEEP_AMOUNT;
            if (elapsedTime > 30000)
            {
                break;
            }
            Thread.Sleep(SLEEP_AMOUNT);
        }
    }

    private static void OnProcessExited(object sender, EventArgs eventArgs)
    {
        // do your work here   
        eventHandled = true;
    }
}

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…