在启动外部应用程序时创建等待光标

本文关键字:创建 等待 光标 应用程序 启动 外部 | 更新日期: 2023-09-27 18:01:48

这是一个新问题…我已经在网上搜索过了,但显然我没有很好地组织这个问题。

我的winform程序启动了一个外部应用程序,我们称它为"watch .exe"。从进程启动到用户可以看到它(最终在任务管理器中作为任务出现),需要5-15秒的时间。我不希望用户在这段时间里感到沮丧,不停地点击启动watchit的按钮,所以我需要一个等待光标或其他指示。

  1. 这个表单上有几个自定义控件,是否有一种方法可以用等待光标覆盖它们的单个光标?也许在表单状态栏中放置文本会比等待光标更好?

  2. 我如何知道在我的程序中Watchit何时启动并运行,以便我可以将光标设置回默认值,或更改表单状态条中的文本?我不想使用计时器来检查Watchit是否已经启动并运行……甚至不知道该检查什么!

我已经尝试使用WMI,但它似乎看过程(或者可能我没有完全掌握WMI)。

进程是如何启动的

Process watchIt = new Process();
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
path = Path.Combine(path, "Watchit.exe");
watchIt.StartInfo = new ProcessStartInfo(path, e.ID.ToString());
if (File.Exists(path))
{
    watchIt.Start();  //Starts Watchit, but how do you know when it's 'up' ?
    Cursor.Current = Cursors.WaitCursor;
}

TIA

在启动外部应用程序时创建等待光标

我通常设置一个模态对话框,它的光标设置为等待光标。你可以让它像开机画面一样无边界。一开始,它总是在最上面,这样它就不会出现在任何东西后面,但一旦它完成加载,将其设置为正常,这样用户就不会在等待时尝试切换应用程序。

如果您想知道何时结束窗口应用程序的等待游标(Process.WaitForInputIdle),

icemanind提供了一个很好的解决方案。如果它是一个控制台应用程序,或者如果它在主窗口出现后有重要的设置要做,你将需要使用一个共享的等待句柄,如信号量或互斥锁,以知道何时删除等待光标(或使用命名管道,但这是更多的开销)。我通常使用GUID来命名互斥,这样它是唯一的。

在主应用程序中创建并等待:

Mutex unlockMutex = new Mutex(false, "MyUniqueName");
try
{
    unlockMutex.WaitOne();
}
catch (AbandonedMutexException ex)
{
    Exception ex2 = ex.InnerException;
}

在您的孩子应用程序中释放:

Mutex unlockMutex = new Mutex(false, "MyUniqueName");
// Release access to unlock mutex
try
{
    unlockMutex.ReleaseMutex();
}
catch (ApplicationException ex)
{
    Exception ex2 = ex.InnerException;
}

您可以使用Process.WaitForInputIdle()方法。直接引用自MSDN文档:

"This state is useful, for example, when your application needs to wait 
for a starting process to finish creating its main window before the 
application communicates with that window."