Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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#windows应用程序don';不要等待子进程_C#_.net_Process - Fatal编程技术网

C#windows应用程序don';不要等待子进程

C#windows应用程序don';不要等待子进程,c#,.net,process,C#,.net,Process,我正在使用以下命令启动子进程: var proc = new Process { StartInfo = new ProcessStartInfo { FileName = _pathChildProc, Arguments = sb.ToString(), UseShellExecute = false, //CreateNoWindow = false } }; proc.Start(); 我使用“UseSh

我正在使用以下命令启动子进程:

var proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
       FileName = _pathChildProc,
       Arguments = sb.ToString(),
       UseShellExecute = false,
       //CreateNoWindow = false
    }
};
proc.Start();

我使用“UseShellExecute=false”,这样就可以直接创建进程,而无需中间控制台

我只想启动子进程并忘掉它,这样我就可以在子进程退出之前退出主应用程序。也可能是我从一个主应用程序实例创建了更多的子进程,我不想等待它们全部完成

问题是,在主应用程序中,即使在主线程完成之后,应用程序仍在等待子进程完成

如何指定我不想等待子进程

编辑


我刚刚创建了两个测试控制台应用程序:“MainApp”、“ChildApp”。MainApp创建ChildApp,如上所述

现在,有趣的是:如果您在启动MainApp时附加了调试器(F5),那么它不会等待子应用,但是如果您在运行MainApp时没有调试器(Ctrl+F5),那么它会等待子应用

主应用程序:

    using System.Diagnostics;

    namespace TestDontWaitForChildProcess
    {
        class Program
        {
            static void Main(string[] args)
            {
                var proc = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = "abc\\Projects\\TestDontWaitForChildProcess\\ChildProc\\bin\\Release\\ChildProc.exe",
                        Arguments = "a",
                        UseShellExecute = false,
                        //CreateNoWindow = false
                    }
            };
            proc.Start();
        }
    }
}
儿童应用程序:

using System.Threading;

namespace ChildProc
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread.Sleep(15000);
        }
    }
}

我不能复制这个。我刚刚尝试了两个简单的应用程序,效果很好。你确定没有其他地方的代码等待
proc
?我刚刚创建了两个测试控制台应用程序:“MainApp”、“ChildApp”。MainApp创建ChildApp,如上所述。有趣的是:如果你在启动MainApp时附加了调试器(F5),那么它不会等待子应用,但是如果你在运行MainApp时没有调试器(Ctrl+F5),那么它会等待子应用。因此,如果你有完整的程序来演示这个问题,请将它们包含在你的问题中。(我有完整的程序证明没有问题…@Jon Skeet。我粘贴的代码是否也适用于您?这基本上与我的代码相同-但我有更多的日志记录来显示所有事情发生的时间。我在没有调试器的情况下运行(仅从控制台)。