我使用 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 显示在顶部。说“它的开始”。调用不是阻塞主窗口,而是接管舞台......