1

いくつかの ovf コマンドを作成するプロセスを作成するバックグラウンドワーカーを作成しようとしています。その間に、ctrl+c を送信して操作を中止しようとします。このサイトにも同様の質問がありますが、どれも問題を解決していません。

private void DeployOVF()
{
    p = new Process();
    ProcessStartInfo pi = new ProcessStartInfo("ovftool.exe", "--machineOutput "+ FileName + " vi://uname:pwd@Ip Address");
    pi.UseShellExecute = false;
    pi.RedirectStandardOutput = true;
    pi.RedirectStandardInput = true;
    pi.RedirectStandardError = true;
    pi.CreateNoWindow = true;
    p.StartInfo = pi;
    p.Start();
    StreamReader myStreamReader = p.StandardOutput;
    string myString;
    bool progressStarted = false;
    while ((myString = myStreamReader.ReadLine()) != null)
    {
        //Logic to display the progress
    }
    p.WaitForExit();
    p.Close();
}

ここで ctrl+c を送信して進行を中止します。

private void button1_Click(object sender, EventArgs e)
{
    p.StandardInput.Write("\x3");
    p.StandardInput.Close();
}
4

1 に答える 1

1

プロセスが応答している場合(つまり、フォアグラウンドスレッドがシグナルに応答している場合)、次を使用する必要があります。

p.CloseMainWindow();

そうでない場合は、次のコマンドでプロセスを(不潔に)中止できるはずですKill

p.Kill();

//Then wait for the process to end
p.WaitForExit();
p.Close();
于 2013-01-23T09:42:32.910 に答える