Windows Mobile 6.5 Process.Start

时间:2012-07-31 21:55:34

标签: c# compact-framework

我有一个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工作?

有什么想法吗?

3 个答案:

答案 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,它可以解释您所看到的行为。