0

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」と言います。呼び出しはメイン ウィンドウをブロックするのではなく、ステージを引き継ぐことです...

4

0 に答える 0