|
分類:[C#]
Win8 64bit Visual Stuidio2015 .Net4.5 C#
お世話になります。
バッチファイルを以下のようなコードで実行し、
標準出力の内容を読みとって画面表示しています。
以下のコードはリストビューを貼り付けたユーザコントロール
に組み込んでおり、
実行するバッチの数にあわせてタブページを動的に増やして
それぞれのタブページにユーザコントロールを貼り付け、
バッチの標準出力を表示しています。
実行するバッチが10個とか増やした場合、1つ目バッチの起動時に
以下コード中の★部分にあるように、なぜかBeginOutputReadLine
の実行で2分30秒程度のブロッキングが発生し、
その後、残りの9個のバッチが一気に実行されるというおかしな挙動を行っています。
----------------------------------------------------
//Processオブジェクトを作成
m_Prs = new System.Diagnostics.Process();
//出力をストリームに書き込むようにする
m_Prs.StartInfo.UseShellExecute = false;
m_Prs.StartInfo.RedirectStandardOutput = true;
//OutputDataReceivedイベントハンドラを追加
m_Prs.OutputDataReceived += this.p_OutputDataReceived;
m_Prs.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
m_Prs.StartInfo.Arguments = string.Format(@"/c {0} {1}", m_strCmd, m_strOption);
//画面非表示
m_Prs.StartInfo.CreateNoWindow = true;
//標準入力
m_Prs.StartInfo.RedirectStandardInput = txInput.Enabled;
//実行パス
m_Prs.StartInfo.WorkingDirectory = m_strExecPath;
//管理者権限
if (m_bAdmin)
m_Prs.StartInfo.Verb = "RunAs";
//起動
try
{
if (m_Prs.Start())
{
//非同期で出力の読み取りを開始
m_Prs.BeginOutputReadLine();
//★2分30分前後の待ち時間発生★
return true;
}
else
{
MessageBox.Show("起動失敗", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception err)
{
MessageBox.Show(err.Message, "プロセス起動異常", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return false;
------------------------------------------
また、この現象は実行するたびに発生したりしなかったりです。
(1)実行対象1個で実行 → 発生しない
(2)実行対象7個で実行 → 発生
(3)実行対象1個で実行 → 発生しない
(4)実行対象2個で実行 → 発生しない
(5)実行対象3個で実行 → 発生
(6)実行対象2個で実行 → 発生
(7)実行対象1個で実行 → 発生
BeginOutputReadLineでこのようなブロッキングが発生する現象について
ご存じないでしょうか。
よろしくお願いします m(__)m
|