2016-07-28 14 views
0

プロセス中に7za.exeウィンドウを閉じるのを防ぐ方法がありますか?フォルダ抽出の進捗状況を表示する必要がありますが、ユーザーがウィンドウを閉じると、C#プログラムでエラーが発生する可能性があります。プロセスが終了するまでユーザーが7za.exeプログラムを閉じることを避ける

public partial class ExtractForm : Form 
{ 
    public ExtractForm() 
    { 
     InitializeComponent(); 
    } 

    private void ExtractForm_Load(object sender, EventArgs e) 
    { 
     InitializeEvent(); 
    } 

    private void InitializeEvent() 
    { 
     Zip.LogFileExtract +=WriteExtractProgression; 
    } 

    private void WriteExtractProgression(string text) 
    { 
     if (InvokeRequired) 
     { 
      this.BeginInvoke(new Action<string>(WriteExtractProgression), text); 
     } 
     else 
     { 
      txtExtract.Text += text; 
      txtExtract.SelectionStart = txtExtract.TextLength; 
      txtExtract.ScrollToCaret(); 
      txtExtract.Refresh(); 
     } 
    } 
} 

Processメソッド:

ExtractForm extractForm = new ExtractForm(); 
extractForm.Show(); 

Process zipProcess = new Process(); 
     using (zipProcess) 
     { 
      zipProcess.StartInfo.UseShellExecute = false;   //Show the cmd. 
      zipProcess.StartInfo.RedirectStandardOutput = true; 
      zipProcess.OutputDataReceived += (object sender, DataReceivedEventArgs outline) => 
      { 
       LogFileExtract(outline.Data); 
       // Add args to a TextBox, ListBox, or other UI element 
      }; 
      zipProcess.StartInfo.CreateNoWindow = true; 
      zipProcess.StartInfo.FileName = pathToZip; 
      zipProcess.StartInfo.Arguments = args; 
      zipProcess.Start(); 
      zipProcess.BeginOutputReadLine(); 
      zipProcess.WaitForExit(); //Wait the process to finish completely. 

     } 
     extractForm.Close(); 
    } 
+0

http://stackoverflow.com/questions/5377423/hide-console-window-from-process-start-c-sharpこれはあなたに答えますか? – Will

+0

いいえ私はコンソールウィンドウが欲しいですが、私は自分でコンソールウィンドウを閉じることを望ましくありません。 –

+0

あなたはおそらくSOLです。 – Will

答えて

1

コンソールウィンドウは、あなたがそれを開始した場合でも、外部窓の開閉を防止するための直接的な方法はありません。

process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardOutput = true; 
process.OutputDataReceived += (sender, args) => 
{ 
    // Add args to a TextBox, ListBox, or other UI element 
} 
process.Start(); 
process.BeginOutputReadLine(); 

UI要素の上に、あなたに直接制御を与える:この特定のユースケースについては

は、あなたがのようなものを使用して開始したプロセスの出力をキャプチャすることができます。ボーナスとして、実行中にコンソールウィンドウがアプリケーションの後ろに失われることはありません。

+0

ええ、プロセスが数分続くことがあります。コンソールウィンドウが表示されない場合は、何か問題が起きたときに顧客に問い合わせます。 –

+0

本当に、プロセスの出力がウィンドウに表示されないコントロール?あなたが好きなら、TextBoxをぼんやりとコンソールウィンドウのように見えるようにすることもできます。 –

+0

ベストはプログレスバーを作ることですが、私は7zaプログラムではできないと思います。あなたのコードで私は進行状況を取得し、私のように私のwinformで書くことができます。おそらく私ができない最高のものです。ありがとう:) –

関連する問題