0

我使用 ainformationWindow(iw)来显示一些命令结果。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 显示在顶部。说“它的开始”。调用不是阻塞主窗口,而是接管舞台......

4

0 回答 0