2016-08-24 5 views
2

現在、私は別のプロセスによって開始され、いつでも、他のプロセスによって終了させることができるWPFアプリケーションで働いていたときに終了。そのリソースにも外部

現在のところunproperデバイスの切断に起因する応答しない状態のままにされているデータ収集USBデバイスを駆動します。

終了する前にハードウェアリソースを解放する機会を得るための適切な方法は何かを知りたいと思います。

  1. いつもアプリケーションインスタンスによって実行されるイベントはありますか?
  2. 私は、アプリケーションインスタンスを越えて、device.Disconnect()メッセージを送信するスレッドを作成することはできますか?それはあなたの主な問題のように聞こえる
+0

ええと...私は["ついにはいつも"伝説を実行する](http://thedailywtf.com/articles/My-Tales)を思い出させます。しかし、合理的な期待があるので、あなたの質問と比較するのは完全に公正ではありません。 – JDB

+0

@JDBそれは素敵な物語でした!さて、プラグを抜くのは少し極端ですが、「Terminate from Task Manager」やスタックオーバーフローのエラーも考慮する必要があります。たとえ答えが「いいえ、おい」であっても、私は状況を捉え、問題を解決するための別の方法を探します。 – heltonbiker

答えて

2

は、USBデバイスがバグだらけであるということです。いつでもWindowsプロセスに何かが起こる可能性があります。デバイスはこれに対処できる必要があります。相互作用していたプロセスが消えた場合、デバイスはこれを認識して対処できる必要があります。私は仕様を知っていません(ドライバーの作者ではありません)が、そこには、それを使用していたプログラムが強制終了されたために働くだけでなく、たくさんのUSBデバイスがあります。第二の問題に私をもたらした

、:あなたの説明からは、「他のプロセスは、」強制的にあなたのプログラムを終了しているようです。どうして?プログラムを終了させるためのより優雅な方法があります。ユーザーが「閉じる」ボタンをクリックしたかのように最低でも、ただでさえ良く、(プロセス間通信のいくつかの種類を提供Altキーになど + F4を押すと、WM_CLOSEメインウィンドウを送信名前付きパイプ)を使用して、親プロセスが特定のコマンド(プログラムを閉じるなど)をプログラムに与えることができます。あなたのプロセスが強制終了されている場合

、あなたがとにかくないそのプロセスの中から、それについてできることは何もありません。シャットダウンコードを実行する必要はなく、プロセスが強制終了された後も継続して実行される特別なスレッドを作成することはできません。

1つのオプションは、まだ別のプログラム、プログラムの状態を監視する「ウォッチドッグ」を書くことになります。プログラムが終了すると、ウォッチドッグがUSBデバイスをクリーンアップする可能性があります。しかし、それは万能薬ではありません。誰かがウォッチドッグのプロセスもやめることができます。

しかし、他のプロセスとあなた間の協力のも、最低額がありますように、あなたは物事を手配することができれば、あなたは、このようなApplication.ExitイベントやウィンドウのClosingClosedイベントなどの通常のメカニズムを利用することができます。

+0

パーフェクト。あなたの第3段落は私が確信したいと思っていたものでした。 2番目と4番目の段落には、このような場合の正しい行動の経路が含まれています。私は物事を整理することができます(言い換えれば、 "私はコードを所有しています")。3番目のオプションは、WPFプロセスを終了するプログラムのソースコードにアクセスできなかった場合に便利な代替方法です。どうもありがとうございました! – heltonbiker

関連する問題