防止程序在进程退出C#时关闭

时间:2018-11-29 10:26:38

标签: c# windows forms process

我有一个通过过程运行的批处理文件,但是当该批处理文件运行完毕并关闭时,窗体也会关闭。我如何防止关闭表单的过程。这是代码。

Process support = new Process();
                        support.StartInfo.FileName = @"C:\Support\Support.bat";
                        support.EnableRaisingEvents = true;
                        support.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                        support.StartInfo.CreateNoWindow = true;
                        support.StartInfo.UseShellExecute = false;
                        support.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
                        support.StartInfo.RedirectStandardOutput = true;
                        support.Start();
                        support.BeginOutputReadLine();

这是将批处理文件的输出写入richTextbox的输出处理程序

private void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
    {
        string line;
        line = (outLine.Data.ToString());
        txtStatus.AppendText(line + "\n");

    }

批处理文件完成后自动关闭,程序也关闭,并且从不执​​行其余代码。

2 个答案:

答案 0 :(得分:0)

您可以使用

Console.ReadLine();

Console.ReadKey();

ReadLine()等待按下Enter键,而ReadKey()等待按下任何键(除了修饰键-Shift,Control,Alt,Command,Option ..等),

如果这纯粹是为了从VS进行测试,那么您可以运行应用程序而无需使用Ctrl + F5进行调试

答案 1 :(得分:0)

进程将自行打开一个窗口,一旦.bat文件退出,将退出并关闭主窗口。并不是您的代码有问题,默认情况下,如果您在资源管理器中双击.bat文件,它就是.bat文件的运行方式(cmd将打开,直到.bat完成,然后再次关闭)

您提到您尝试过“ Process.WaitForExit()”,但我想指出的是,在您的上下文中,它应该是“ support.WaitForExit()”,就像您的“ dt.WaitForExit()”(代码您发布的帖子现在已删除)

如果这不起作用,请在support.bat文件的新行中添加“ PAUSE”。这也将阻止窗口在按下键之前关闭。

如果您无权编辑support.bat文件,则只需读取文件内容并将其临时保存在某个位置,然后运行它...或添加它即可:

using (StreamWriter w = File.AppendText("support.bat"))
{
  w.WriteLine("PAUSE");
}

上面显然是一个示例,您需要在再次写入文件之前检查“ PAUSE”是否已经是最后一行。我也没有显示有关如何创建文件和保存文件的代码,您应该能够处理它:)