0

我进入了一个动态定义的循环,该函数将运行 onClick 控件。

功能如下:

   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!
                });

}
4

2 回答 2

3

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

返回值

类型:System.Diagnostics.Process

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

更新:如果你的文件名是一个错误的文件名,它显然会抛出一个异常。

于 2012-06-07T15:20:20.550 回答
2

Process.Start 重载的文档解释了正在发生的事情(强调我的):

使用此重载通过指定其文件名来启动进程资源。重载将资源与新的 Process 组件相关联。如果进程已经在运行,则不会启动额外的进程资源。相反,现有的流程资源会被重用,并且不会创建新的流程组件。在这种情况下,Start 不会返回新的 Process 组件,而是将 null 返回给调用过程。

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

于 2012-06-07T15:20:27.883 回答