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或类似方法非常感谢您的回答。我解决了这个问题。但是我现在对这些事件有个问题。。请查看我的更新问题。非常感谢您的回答。我解决了这个问题。但是我现在对这些事件有个问题。。请查看我的更新问题。非常感谢您的回答。我解决了这个问题。但是我现在对这些事件有个问题。。请查看我的更新问题。非常感谢您的回答。我解决了这个问题。但是我现在对这些事件有个问题。。请查看我的更新问题。