对于创建的每个选项卡,将打开一个应用程序。我可以关闭标签页本身,但是当我检查任务管理器时,应用程序仍在运行。
关闭某个标签时,如何确定要关闭哪个应用程序?
例如,有3个标签,当我关闭标签2时,它只会杀死在标签2上运行的应用程序。
我可以在胜利结束时杀死所有玩家:
Process[] localByName = Process.GetProcessesByName("notepad");
foreach (Process p in localByName)
p.Kill();
答案 0 :(得分:1)
在选项卡页的Tag
属性中存储对启动过程的引用:
TabPage tabpage = new TabPage();
tabControl1.TabPages.Add(tabpage);
tabpage.Tag = Process.Start("notepad");
现在,当您关闭标签页时,需要获取要关闭的标签页的引用,将Tag
强制转换为Process
并调用Kill()
:
Process processtoremove = (Process)tabpagebeingremoved.Tag;
processtoremove.Kill();
答案 1 :(得分:0)
我创建了一个类来运行和存储进程的tabName和PID
public class myProcess
{
private static Hashtable _sessions;
public static Hashtable sessions
{
get { return _sessions; }
set { _sessions = value; }
}
public static void run(string name, string _Process)
{
Process p = Process.Start(name, _Process);
sessions.Add(name, p.Id);
p.WaitForInputIdle();
}
}
在加载表单时:
myProcess.sessions = new Hashtable();
创建标签时:
ctr++;
String name = box + ctr;
TabPage tp = new TabPage(name);
Panel tb = new Panel();
tb.Dock = DockStyle.Fill;
tp.Controls.Add(tb);
myTab.TabPages.Add(tp);
myTab.SelectedTab = tp;
tp.Name = name;
myProcess.run(name, "Notepad")
然后在关闭标签页后,获取tabName并终止进程
String tabName = myTab.SelectedTab.Name;
int PID = Int32.Parse(myProcess.sessions[tabName].ToString() );
Process sTab = Process.GetProcessById(PID);
sTab.Kill();