Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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# Process.Start()给定的对象引用在_C#_Process - Fatal编程技术网

C# Process.Start()给定的对象引用在

C# Process.Start()给定的对象引用在,c#,process,C#,Process,我在一个动态定义的循环中,该函数将在单击控件时运行 功能如下: public static void TryOpenFile(string filename, EventHandler callback) { Process proc; proc = Process.Start(filename); if (callback != null) {

我在一个动态定义的循环中,该函数将在单击控件时运行

功能如下:

   public static void TryOpenFile(string filename, EventHandler callback)
        {

                Process proc;
                proc = Process.Start(filename);

             if (callback != null)
                {
                    proc.EnableRaisingEvents = true;
                    proc.Exited += (a, b) =>
                        {
                            callback(a, b);
                        };
                }
}
然后:

for(int i = 0; i < numberOfControls; i++)
{

            controlImg.SetFileToOpen(file, 
                delegate
                {
                    //exited!
                });

}
for(int i=0;i
看起来您的文件名指向一个已经运行的进程。根据:

返回值

类型:System.Diagnostics.Process

一种新的流程组件 与进程资源关联的,如果没有进程,则为null 资源已启动(例如,如果重用现有流程)


更新:如果您的文件名是错误的文件名,它显然会引发异常。

看起来您的文件名指向一个已经运行的进程。根据:

返回值

类型:System.Diagnostics.Process

一种新的流程组件 与进程资源关联的,如果没有进程,则为null 资源已启动(例如,如果重用现有流程)

更新:如果您的文件名是错误的文件名,它显然会引发异常。

解释发生了什么(强调我的):

使用此重载可通过指定进程资源的文件来启动进程资源 名称重载将资源与新进程相关联 组成部分如果进程已在运行,则无其他进程 资源已启动。而是重用现有流程资源 并且不会创建新的流程组件在这种情况下,而不是 返回一个新的流程组件时,Start会将null返回给调用 程序。

如果您使用ShellExecute通过文件的关联而不是运行可执行文件来启动文件,则可能不会启动新进程。例如,如果
filename
是(例如)“C:\Test.xls”,它可能会启动Excel。但是,如果Excel已经在运行,它可能会在现有的运行实例中打开该文件,而不是启动新进程。在这种情况下,
proc
的值将为空。

解释发生了什么(强调我的):

使用此重载可通过指定进程资源的文件来启动进程资源 名称重载将资源与新进程相关联 组成部分如果进程已在运行,则无其他进程 资源已启动。而是重用现有流程资源 并且不会创建新的流程组件在这种情况下,而不是 返回一个新的流程组件时,Start会将null返回给调用 程序。


如果您使用ShellExecute通过文件的关联而不是运行可执行文件来启动文件,则可能不会启动新进程。例如,如果
filename
是(例如)“C:\Test.xls”,它可能会启动Excel。但是,如果Excel已经在运行,它可能会在现有的运行实例中打开该文件,而不是启动新进程。在这种情况下,
proc
的值将为空。

使用Process.WaitForExited或类似方法使用Process.WaitForExited或类似方法非常感谢您的回答。我解决了这个问题。但是我现在对这些事件有个问题。。请查看我的更新问题。非常感谢您的回答。我解决了这个问题。但是我现在对这些事件有个问题。。请查看我的更新问题。非常感谢您的回答。我解决了这个问题。但是我现在对这些事件有个问题。。请查看我的更新问题。非常感谢您的回答。我解决了这个问题。但是我现在对这些事件有个问题。。请查看我的更新问题。