コマンド ラインで引数を指定して exe を実行するプロセスを実行すると、完了するまでに時間がかかります。その間、進行状況バーとキャンセル ボタンを含むダイアログとしてフォームを表示します。キャンセルボタンが押されると、プロセスは中止/停止する必要があります。私はそれを行うには2つの方法があります:
A. メイン フォームで Process クラスの public static オブジェクトを宣言し、キャンセル ボタンがクリックされたときに進行状況フォームから中止します。
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(); を呼び出さないでください。代わりに Process.HasExited を使用して、プロセスが実行されているかどうかを確認し、キャンセル ボタンがクリックされた場合はキャンセルします。
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;
}
}
それを行う正しい方法は何ですか?