0

Windows Mobile 6.5で2つのコマンドラインアプリケーション(ウィンドウなし、プロセスのみ)を起動するGUIアプリケーションがあります。私はプロセスを開始するために次のコードを使用しています:

Process service = new Process();
var pi = new ProcessStartInfo(exePath, null);
    pi.UseShellExecute = false;        
    service.StartInfo = pi;
    //start the process
    service.Start();

service.Start()が呼び出されたときを除いて、すべてが正常に機能します。私のGUIアプリケーションは、画面の中央で回転する円で覆われています。プログラムの開始を待っている間に回転する同じアイコンは、OSがビジーであることを意味します。これらのプロセスはGUIの存続期間中実行され、GUIが終了した後でも実行されるため、この円は消えません。コードを介してそれをなくす方法はありますか?GUIを無効にして再描画し、カーソルを通常に変更してみました。動作しませんか?

何か案は?

4

3 に答える 3

1

何がexePath起動しますか?

私の推測では、サイモン・マッケンジーはすでにこれを頭に釘付けにしています. それはおそらくまさに起こっていることです。

ただし、OS は、集中的な 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 に答える