在启动外部应用程序时创建等待光标
本文关键字:创建 等待 光标 应用程序 启动 外部 | 更新日期: 2023-09-27 18:01:48
这是一个新问题…我已经在网上搜索过了,但显然我没有很好地组织这个问题。
我的winform程序启动了一个外部应用程序,我们称它为"watch .exe"。从进程启动到用户可以看到它(最终在任务管理器中作为任务出现),需要5-15秒的时间。我不希望用户在这段时间里感到沮丧,不停地点击启动watchit的按钮,所以我需要一个等待光标或其他指示。
-
这个表单上有几个自定义控件,是否有一种方法可以用等待光标覆盖它们的单个光标?也许在表单状态栏中放置文本会比等待光标更好?
-
我如何知道在我的程序中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."