인수를 사용하여 명령 줄에서 exe를 실행하는 프로세스를 실행하며 완료하는 데 시간이 걸립니다. 그 동안 진행률 표시 줄과 취소 버튼이있는 대화 상자로 양식을 표시합니다. 취소 버튼을 누르면 프로세스가 중단/중지되어야합니다.실행 중 프로세스 취소
A. 주요 형태 Process 클래스의 공용 정적 객체를 선언하고 버튼을 클릭 취소 할 때 진행 양식에서 중단 :
public partial class frmMain : Form
{
public static Process Process = new Process();
public static bool ExecuteCommand(string sCommandLineFile, string sArguments)
{
Process.StartInfo.FileName = sCommandLineFile;
Process.StartInfo.Arguments = sArguments;
Process.StartInfo.CreateNoWindow = true;
Process.StartInfo.UseShellExecute = false;
Process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
Process.Start();
Process.WaitForExit();
}
}
그리고 가까운 /에서 프로세스를 중지 나는 그것을 두 가지 방법이 진행 창 형식 :
public partial class frmProgress : Form
{
private void btnCancel_Click(object sender, EventArgs e)
{
frmMain.Process.Close();
frmMain.Process.Dispose();
}
}
B. 또는 Process.WaitForExit();을 호출하지 마십시오.
public static bool IsCancelled = false;
Process.StartInfo.FileName = sCommandLineFile;
Process.StartInfo.Arguments = sArguments;
Process.StartInfo.CreateNoWindow = true;
Process.StartInfo.UseShellExecute = false;
Process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
while (!Process.HasExited)
{
Thread.Sleep(100);
Application.DoEvents();
if (IsCancelled)
{
Process.Close();
Process.Dispose();
}
}
public partial class frmProgress : Form
{
private void btnCancel_Click(object sender, EventArgs e)
{
frmMain.IsCancelled = true;
}
}
을 할 수있는 올바른 방법은 무엇입니까 : 버튼을 클릭 취소하면 대신하여 프로세스가 실행 중인지 확인 및 취소 Process.HasExited를 사용할 수 있습니까?
'Process.HasExited'를 폴링 할 필요없이'frmMain.Process.CanRaiseEvents = true'를 실행 한 다음 [Exited] (https://msdn.microsoft.com/en-us/library/system.diagnostics)에 가입 할 필요가 없습니다. .process.exited (v = vs.110) .aspx) 이벤트. –