C#中的应用程序启动

1 c#

我们有一个小的C#启动应用程序,用户启动它从网络共享运行我们的主要C#WinForms应用程序的最新版本.这是一种简化的ClickOnce安排(我们的IT人员不允许我们使用ClickOnce).

启动应用程序在调用Process.Start("MainApplication.exe")后退出,但主应用程序可能需要几秒钟才能显示,使用户留下空白屏幕.

是否有一种方法可以让starup应用程序轮询操作系统,以确定主应用程序在退出之前是否正在运行?或者其他一些方法来处理这个问题?

Jus*_*ner 11

您可以使用Process.WaitForInputIdle()等待应用程序进入空闲状态.

Process appProcess = Process.Start("MainApplication.exe");
appProcess.WaitForInputIdle();
Run Code Online (Sandbox Code Playgroud)

来自MSDN:

...你刚刚开始一个进程并希望使用它的主窗口句柄,考虑使用WaitForInputIdle方法允许进程完成启动,确保已创建主窗口句柄

备注Process.MainWindowHandle属性的部分.


Dav*_*vid 7

您可以调用Process.GetProcessByName来查看是否已创建新进程.另一个选择是让主应用程序在加载完成后终止它.

  • 除了使用这种方法,我建议添加一个启动或加载屏幕,这样用户就不会对应用程序挂起. (2认同)
  • 使用GetProcessByName的问题是可以启动其主应用程序的进程(他将获得进程名称),但GUI可能尚未在屏幕上绘制. (2认同)

Gan*_* R. 5

使用Davids的建议,或者您可以在主应用程序中放置一个闪屏.它只是一个简单的Form,其中一个图像在一个单独的工作线程上运行.把它作为启动时调用的第一个项目.您的应用程序可以继续在主线程上初始化并在几秒钟之后或在主应用程序完成初始化之前杀死工作线程.