我正在编写一个程序,在目录中启动一个随机文件.该文件可以是任何时间,但主要是视频或图像文件.每次我启动一个文件,我想关闭以前打开的文件.代码是:
string FolderSelected = "";
string FileName = "";
Process proc;
List<string> FilesDisplayed = new List<string>();
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
if (FolderSelected == string.Empty)
FolderSelected = Properties.Settings.Default.FilesDefaultFolder;
if (proc != null)
{
proc.CloseMainWindow();
proc.Close();
}
FileName = FetchRandomFile();
proc = Process.Start(FileName);
}
Run Code Online (Sandbox Code Playgroud)
问题是,我一直得到proc = null(文件正确启动),我无法获取以前打开的进程,以便关闭它.我知道.NET重用进程,这就是为什么它返回Null但我需要覆盖这种行为.请帮忙,盖伊.
Jon*_*eet 14
编辑:感谢leppie的评论,我怀疑我知道答案:我的猜测是你正在"开始"类似于图像的东西,并且它正在重复使用现有流程来打开文档而不是创建新文档.
我用这个简单的测试应用程序重现了这个:
using System;
using System.Diagnostics;
public class Test
{
static void Main()
{
Process proc = Process.Start("image.tif");
Console.WriteLine(proc == null);
}
}
Run Code Online (Sandbox Code Playgroud)
这打印为"true",因为它dllhost.exe用于托管Windows Image Viewer,而不是创建新进程.
您在方法范围内声明“proc”,因此在该方法的顶部检查时它当然始终为空。如果您希望引用存在于函数之外,请将其声明为类级别变量。
您每次(可能)都会生成一个进程,Process.Start 不会返回 null,但当 i 超出范围时,您只是丢失了对它的引用。