我有两个.NET应用程序:
parent-app.exe
( WPF )child-app.exe
( WinForms )第一个应用程序启动第二个应用程序
parent-app.exe
→child-app.exe
通过班级System.Diagnostics.Process
。
当用户点击parent-app.exe
界面上的按钮时,我立即开始child-app.exe
的过程。因为child-app.exe
是.NET应用程序,所以在用户看到窗口之前需要一些时间(特别是在慢速系统上)。
我想向用户显示parent-app.exe
的中间(可能是对话框)窗口。此对话框窗口应该说正在处理用户操作,他应该等待child-app.exe
的窗口显示。
如何查看
parent-app.exe
窗口的child-app.exe
可见性状态 ?这是一个较长的问题。如何通过考虑限制来实现这个显示中间窗口的系统 两个程序都使用.NET?
答案 0 :(得分:1)
根据建议here,您可以尝试调用Process.WaitForInputIdle
方法等待创建MainWindowHandle
或定期调用Process.Refresh
并检查是否MainWindowHandle
返回一个有效的句柄。也许这对您来说已经足够了,否则您可以通过句柄获得更多信息。在WinForms中你可能会做这样的事情:
Form window = (Form)Control.FromHandle(process.MainWindowHandle);
我怀疑其他框架有类似的解决方案。
<强>更新强>
我写了这个小样本,它是未经测试的,我不知道它是否可靠(它可能会死锁),但它应该暗示你可以尝试的一些事情:
namespace SomeNS
{
using System.Diagnostics;
using System.Windows.Forms;
public static class SomeClass
{
static void SomeMethod()
{
Process process = Process.Start("child-app.exe");
// YourDialog is your dialog implementation inheriting from System.Windows.Window
YourDialog dlg = new YourDialog();
dlg.Loaded += (sender, e) =>
{
process.WaitForInputIdle();
Form window = (Form)Control.FromHandle(process.MainWindowHandle);
// Do something with the child app's window
dlg.Close();
};
dlg.ShowDialog();
}
}
}