如何在Application Exit或Exit按钮上退出此场景的进程。
namespace test2
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private void Startbutton_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo("ffmpeg.exe");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "-i " + urltext.Text.Trim() + "?fifo_size=1000000 -map 0:p:" + Channeltext.Text.Trim() + " -vcodec copy -acodec copy -f segment -segment_time " + splittimetext.Text.Trim() + " " + filenametext.Text.Trim() + "-%03d.ts";
System.Diagnostics.Process.Start(startInfo);
}
}
如何在Application Exit上退出此场景的进程。
答案 0 :(得分:5)
将流程实例保存到变量,然后订阅ProcessExit,当事件被触发时,终止该流程。
var process = System.Diagnostics.Process.Start(startInfo);
AppDomain.CurrentDomain.ProcessExit += (a,b) => process.Kill();
答案 1 :(得分:1)
作为班级成员继续引用您的流程。
Process myProcess;
在启动流程的方法中
myProcess = new Process(startInfo);
myProcess.Start();
最后,订阅表单完成/结束时发生的事件,并通过调用myProcess.Kill();
来终止进程
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
try { myProcess.Kill(); }
catch { ... }
}
答案 2 :(得分:0)
您最终可能会使用以下代码终止该进程:
try {
foreach(System.Diagnostics.Process myProc in System.Diagnostics.
Process.GetProcesses())
if (myProc.ProcessName == "process name")
myProc.Kill();
} catch(Exception ex) {}
将其置于OnExit()方法下并覆盖。
答案 3 :(得分:0)
子进程应该自动关闭,但如果它让你的主应用程序关闭,那么将它们存储在公共列表中以便以后关闭。
public partial class MainForm : Form
{
List<Process> myProcesses = new List<Process>();
public MainForm()
{
InitializeComponent();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
foreach (System.Diagnostics.Process myProcess in myProcesses)
{
myProcess.Close();
}
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private void Startbutton_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo("ffmpeg.exe");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "-i " + urltext.Text.Trim() + "?fifo_size=1000000 -map 0:p:" + Channeltext.Text.Trim() + " -vcodec copy -acodec copy -f segment -segment_time " + splittimetext.Text.Trim() + " " + filenametext.Text.Trim() + "-%03d.ts";
myProcesses.add(System.Diagnostics.Process.Start(startInfo));
}
}
此示例使用您计划拥有多个列表的列表。