Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在使用Start.Process()时关闭子命令窗口;_C#_.net_Cmd - Fatal编程技术网

C# 如何在使用Start.Process()时关闭子命令窗口;

C# 如何在使用Start.Process()时关闭子命令窗口;,c#,.net,cmd,C#,.net,Cmd,我希望在命令完成后触发子命令窗口的关闭事件。请记住,这是一个从控制台应用程序启动的后台进程,因此它永远不可见。可见的是控制台应用程序 我尝试使用退出的事件,但没有成功。我试图通过使用/c、/k和exit依赖CMD来知道何时关闭它。两者似乎都不起作用。我还尝试了do while循环检查hasExit,除非我在应用程序控制台窗口中键入“exit”,否则这些检查都不起作用。它不会关闭,但会以某种方式触发不可见的子命令窗口关闭 子命令完成后,是否有其他方法关闭它 String msg = "echo %

我希望在命令完成后触发子命令窗口的关闭事件。请记住,这是一个从控制台应用程序启动的后台进程,因此它永远不可见。可见的是控制台应用程序

我尝试使用退出的事件,但没有成功。我试图通过使用/c、/k和exit依赖CMD来知道何时关闭它。两者似乎都不起作用。我还尝试了do while循环检查hasExit,除非我在应用程序控制台窗口中键入“exit”,否则这些检查都不起作用。它不会关闭,但会以某种方式触发不可见的子命令窗口关闭

子命令完成后,是否有其他方法关闭它

String msg = "echo %time%; exit;";  
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = msg;
p.EnableRaisingEvents = true;
p.Exited += p_Exited; 
p.Start();
msg += p.StandardOutput.ReadToEnd();

非常感谢

我稍微修改了您的程序,以运行子命令处理器,捕获其输出,然后将其写入控制台

        char quote = '"';
        string msg = "/C " + quote + "echo %time%" + quote;
        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = "cmd.exe";
        p.StartInfo.Arguments = msg;
        p.EnableRaisingEvents = true;
        p.Exited += (_, __) => Console.WriteLine("Exited!");
        p.Start();
        string msg1 = p.StandardOutput.ReadToEnd();

        Console.WriteLine(msg1);
这是一个完整的程序,使用稍微不同的语法,但精神上相似:

using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            char quote = '"';
            var startInfo = new ProcessStartInfo("cmd", "/C " + quote + "echo %time%" + quote)
            { UseShellExecute = false, RedirectStandardOutput = true };

            var process = new Process { EnableRaisingEvents = true };
            process.StartInfo = startInfo;
            process.Exited += (_, __) => Console.WriteLine("Exited!");
            process.Start();
            string msg1 = process.StandardOutput.ReadToEnd();

            Console.WriteLine(msg1);

            Console.ReadLine();
        }
    }
}
或者,如图所示,只需调用
DateTimeOffset.Now
。如果你对亚秒信息感兴趣,可以使用
Stopwatch
class


如果您喜欢使用C#中的命令来驱动命令行,也可以这样做。如何将事件转换为任务;然后使用async/await创建一个程序化的命令和响应序列。

这太棒了谢谢你,格雷格!