0

我有一个 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 退出之后,这个循环也不会消失。有没有办法通过代码让它消失?我尝试使 gui 无效以重新绘制并将光标更改为正常。不工作吗?

有任何想法吗?

4

3 回答 3

1

启动什么exePath

我的猜测是Simon McKenzie已经把这个钉在了头上。这可能正是正在发生的事情。

然而,每当操作系统启动一些密集的 CPU 进程时,它也会抛出一个WaitCursor在屏幕中心旋转的圆圈)。如果是这种情况,您可能需要重新考虑如何处理您正在启动的这个过程 - 特别是如果您是编写该过程的人。

考虑下面的假设应用程序来轮询网络并编译到您的exePath

while (true) {
  if (networkDataAvailable()) {
    processData();
  }
}

那个假设的应用程序会占用处理器的空闲时间。

如果您正在启动的进程执行类似的操作,您将需要找到另一种方法来解决问题,例如在计时器滴答事件中调用更简单的进程。

由 标识的修改后的过程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();
}
于 2012-08-01T17:31:36.677 回答
0

如果不了解更多关于您在 exePath 中启动的过程正在做什么,这很难诊断。如果该进程抛出等待光标并独占 CPU,它可能会解释您所看到的行为。

于 2012-08-01T12:39:05.377 回答
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();
于 2012-08-01T05:35:29.187 回答