我有一个GUI应用程序,可以在Windows Mobile 6.5上启动两个命令行应用程序(无窗口,只是进程)。我正在使用以下代码来启动进程:
Process service = new Process();
var pi = new ProcessStartInfo(exePath, null);
pi.UseShellExecute = false;
service.StartInfo = pi;
//start the process
service.Start();
一切正常,但是当调用service.Start()时,我的GUI应用程序被一个在屏幕中心旋转的圆形覆盖。在等待程序启动时旋转的相同图标表示操作系统正忙。现在,由于这些过程将在GUI的生命周期内运行,甚至在GUI退出后,这个循环也不会消失。有没有办法通过代码让它消失?我尝试Invalidating gui重新绘制并将光标更改为正常。 Dosnt工作?
有什么想法吗?
答案 0 :(得分:1)
exePath
启动什么?
我的猜测是Simon McKenzie已经将这个问题钉在了头上。这可能正是发生的事情。
然而,每当启动一些密集的CPU进程时,操作系统也会抛出一个WaitCursor(圆圈在屏幕中央旋转)。如果是这种情况,您可能需要重新考虑如何处理您正在启动的流程 - 特别是如果您是编写流程的人。
考虑下面的假设应用程序来轮询网络并编译到您的exePath
:
while (true) {
if (networkDataAvailable()) {
processData();
}
}
这个假设的应用程序会在处理器的空闲时间消耗掉。
如果您正在启动的过程执行类似的操作,则需要找到另一种方法来解决问题,例如在计时器tick事件中调用更简单的过程。
exePath
标识的修改过程现在为:
if (networkDataAvailable()) {
processData();
}
从Windows应用程序中,您可以根据需要调用它:
private void timer1_Tick(object sender, EventArgs e) {
Process service = new Process();
var pi = new ProcessStartInfo(exePath, null);
pi.UseShellExecute = false;
service.StartInfo = pi;
//start the process
service.Start();
}
答案 1 :(得分:0)
听起来service.Start()
的调用可能会阻塞主线程。也许您可以尝试在新线程中启动您的流程:
private void StartProcess()
{
Process service = new Process();
var pi = new ProcessStartInfo(exePath, null);
pi.UseShellExecute = false;
service.StartInfo = pi;
//start the process
service.Start();
}
...
Thread t = new Thread(StartProcess);
t.Start();
答案 2 :(得分:0)
如果不了解更多关于您在exePath中启动的进程正在做什么,这很难诊断。如果该进程抛出等待光标并独占CPU,它可以解释您所看到的行为。