DOBON.NET DOBON.NETプログラミング掲示板過去ログ

外部アプリケーション終了時のハンドル

環境/言語:[WindowsCE C#]
分類:[.NET]

WindowsCE C#を使用して開発しています。
現在やろうとしていることは、あるアプリケーション(メイン)から
別のアプリケーション(サブ)を起動して、外部アプリケーション(サブ)が
終了するまで元のアプリを待機させたいのですが、うまくいきません。
WindowsCE以外なら分かったのですが、WindowsCEで外部アプリケーション
が終了したことを知らせるハンドルはあるのでしょうか?

終了ハンドル、又は条件を満たすよい方法をご存知の方がいましたら教えてください。
よろしくお願いします。
■No7392に返信(たろうさんの記事)
> WindowsCE C#を使用して開発しています。
> 現在やろうとしていることは、あるアプリケーション(メイン)から
> 別のアプリケーション(サブ)を起動して、外部アプリケーション(サブ)が
> 終了するまで元のアプリを待機させたいのですが、うまくいきません。
> WindowsCE以外なら分かったのですが、WindowsCEで外部アプリケーション
> が終了したことを知らせるハンドルはあるのでしょうか?
>
> 終了ハンドル、又は条件を満たすよい方法をご存知の方がいましたら教えてください。
> よろしくお願いします。

System.Diagnostics.Process クラスを使えば容易に出来そうなんだけど...
やっぱり、使えないってことなのかなぁ。(;´_ゝ`)
(CEにどれだけ制限があるのか、存じませんのでアレですけど)

以下に横着な例ですが、何となく出来たので貼っておきます。
描画部分にそれなりに工夫を加えた方が良いですが。
(あと、スレッドセーフになるようにすべきかな?)

private void button1_Click(object sender, EventArgs e) {
  System.Diagnostics.Process hProcess = System.Diagnostics.Process.Start("Notepad");

  while (!hProcess.HasExited) {
    System.Threading.Thread.Sleep(100);
    this.Refresh();
  }
}
■No7394に返信(java.lang.Nullpoさんの記事)
>
> System.Diagnostics.Process クラスを使えば容易に出来そうなんだけど...
> やっぱり、使えないってことなのかなぁ。(;´_ゝ`)
> (CEにどれだけ制限があるのか、存じませんのでアレですけど)
>
> 以下に横着な例ですが、何となく出来たので貼っておきます。
> 描画部分にそれなりに工夫を加えた方が良いですが。
> (あと、スレッドセーフになるようにすべきかな?)
>
> private void button1_Click(object sender, EventArgs e) {
>   System.Diagnostics.Process hProcess = System.Diagnostics.Process.Start("Notepad");
>
>   while (!hProcess.HasExited) {
>     System.Threading.Thread.Sleep(100);
>     this.Refresh();
>   }
> }

java.lang.Nullpoさんお返事ありがとうございます。
java.lang.Nullpoさんのおっしゃる通り、System.Diagnostics.Processクラス
があればよいのですが使えません。。。

上記で教えていただいたコードもその理由で(!hProcess.HasExited)という文
でエラーとなってしまいます。(定義がないっていわれます)

現在、プロセスの立ち上げには、「WindowsAPI.CreateProcess」を使用してい
ます。(説明不足ですみません)

 もしWindowsAPI.CreateProcessで立ち上げたプロセスに同様の処理があれば
ご教授ください。よろしくお願いします。
>  もしWindowsAPI.CreateProcessで立ち上げたプロセスに同様の処理があれば
> ご教授ください。よろしくお願いします。

 Windows CE 向けの開発はしたことありませんが、 WaitForSingleObject は使えるようです。

アプリケーションの起動と処理の再開
http://www.gotdotnet.com/japan/quickstart/CompactFramework/doc/waitforsingleobject.aspx

#って、そういうことじゃないのかな?(^_^;)
2004/11/15(Mon) 18:50:15 編集(投稿者)

■No7400に返信(たろうさんの記事)
> java.lang.Nullpoさんお返事ありがとうございます。
> java.lang.Nullpoさんのおっしゃる通り、System.Diagnostics.Processクラス
> があればよいのですが使えません。。。
> 上記で教えていただいたコードもその理由で(!hProcess.HasExited)という文
> でエラーとなってしまいます。(定義がないっていわれます)

やはりそうなのですか...。orz

> 現在、プロセスの立ち上げには、「WindowsAPI.CreateProcess」を使用してい
> ます。(説明不足ですみません)
> もしWindowsAPI.CreateProcessで立ち上げたプロセスに同様の処理があれば
> ご教授ください。よろしくお願いします。

深山さんに追加になりますが、WaitForSingleObjectの後に、CloseHandle() だったかな?
java.lang.Nullpo さん、深山さん
お返事ありがとうございます。

確認してみましたところ、WaitForSingleObject使えました!
本当にありがとうございました。
またなにかあったときはよろしくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板