我有一个Windows C#应用程序app1,我通过单击按钮启动另一个应用程序app2,其中包含:
var myProc = Process.Start("app2.exe", myArgs);
myProc.WaitForExit();//to wait I finish with app2.exe
这很有效,但在app2打开时我有两个问题:
那么如何将app2保持在前面,即使我点击了app1图标(我不确定它是否可能因为app1和app2是完全不同的应用程序)?
对我来说更重要的是如何在app2打开时让app1不响应/保留内存事件?
答案 0 :(得分:0)
一种解决方案是禁用第一个应用程序的所有窗口,只要子进程正在运行即可。此外,您可以将应用程序的主窗口设置为子应用程序打开的窗口的所有者(子应用程序是否应显示任何窗口)。
如果您提供有关所用技术的更多详细信息,我们可以提供进一步的帮助。
答案 1 :(得分:0)
你可以使用
`myProcess.windowstyle`
将app2设置为最小化,或者即使隐藏processWindowStyle.Hidden
也没有错误。
您还可以使用
将app1置于顶部 myForm.Topmost = true;
为了确保您的应用不再响应按钮的使用,您可以禁用按钮
myButton.Enabled = false;
在您启动应用2之前,并在您的应用之后重新启用它们
myProcess.WaitForExit()
方法
答案 2 :(得分:0)
根据Dirk Vollmar的建议禁用表单,但在禁用时也使用async / await和Task.Run()来抽取队列。这将导致应用程序在禁用表单时丢弃所有用户输入,而不是排队并在再次启用表单后对其进行处理:
private async void button1_Click(object sender, EventArgs e)
{
this.Enabled = false;
await Task.Run(() =>
{
var myProc = Process.Start("calc");
myProc.WaitForExit();
});
this.Enabled = true;
}
答案 3 :(得分:0)
您必须在另一个任务中创建它
app1.WindowState = FormWindowState.Minimized;
Task t = YourProcess();
t.Wait();
app1.WindowState = FormWindowState.Maximized;
您的任务
private Task YourProcess()
{
return Task.Run(() => {
var myProc = Process.Start("app2.exe", myArgs);
myProc.WaitForExit();
});
}