informationWindow(iw)
コマンドの結果を表示するために a を使用します。はiw
メイン ウィンドウの後ろに隠れており、非同期呼び出しが完了するまでメイン ウィンドウは無効になっています。非同期呼び出しなので、ウィンドウが非表示になる理由がわかりません。
LKProcess.AsyncDelegate caller = new LKProcess.AsyncDelegate(LKProcess.RunCommands);
IAsyncResult result = caller.BeginInvoke(cmds, null, null);
//result.AsyncWaitHandle.WaitOne();
iw.Show();
iw.Topmost=true;
var resultList = caller.EndInvoke(result);
string combindedString = string.Join(",", resultList);
iw.tbkMessageBox.Inlines.Add(combindedString );
更新: iw.Show() を非同期呼び出しから移動しましたが、何も変更されていません。デリゲート メソッド (私の場合は CMD プロセス) がメイン ウィンドウをブロックしていますか?
iw.Show();
iw.Topmost=true;
LKProcess.AsyncDelegate caller = new LKProcess.AsyncDelegate(LKProcess.RunCommands);
IAsyncResult result = caller.BeginInvoke(cmds, null, null);
var resultList = caller.EndInvoke(result);
string combindedString = string.Join(",", resultList);
更新 さらにテストを行ったところ、AsyncDelegate は次のようになりました。
public static class LKProcess
{
public delegate IEnumerable<string> AsyncDelegate(params string[] commands);
public static IEnumerable<string> RunCommands(params string[] commands)
{
Thread.Sleep(5000);
var result = new List<string>();
Return result;
}
}
そして私のメインは次のようになります:
iw.Show();
iw.Topmost = true;
iw.tbkMessageBox.Inlines.Add("IT's Start");
LKProcess.AsyncDelegate caller = new LKProcess.AsyncDelegate(LKProcess.RunCommands);
var resultList = caller.EndInvoke(result);
iw が表示され、フラッシュしてから非表示になり、非同期呼び出しが呼び出されます。5 秒後、iw が一番上に表示されます。「IT's Start」と言います。呼び出しはメイン ウィンドウをブロックするのではなく、ステージを引き継ぐことです...