Windows サービスとして展開された単一の exe から 2 つのサービスを作成しました。各サービスは、dll(クラス ライブラリ プロジェクト)に対応しています。サービスを停止すると、dll がアンロードされず、この dll に対応するコードが引き続き実行されます。定期的に実行されるポーラーがあり、これはサービスがシャットダウンされてもポーリングを続けます。サービスが停止したときに対応する dll をアンロードするにはどうすればよいですか?
質問する
38 次
1 に答える
0
dll のアンロードは、ドットネットで行う方法ではありません。サービス クラスの onStop() メソッドをオーバーライドする必要があります。対応する dll にポーリングへの応答を控えるように通知するフラグを設定します。ポーラースレッドを強制終了するか、セマフォを使用して、開始/再開されるまでスレッドをブロックすることをお勧めします。
いくつかのコードを示していただければ、さらにお手伝いできます。推測、
ポーリングプロセスをトリガーするタイマーはありますか? 次に、そのタイマーを停止/破棄します。サービスの OnStart() で新しいタイマーを作成します。別の方法は、タイマーのコールバックでフラグを確認することです。
ポーリングを行う無限 while ループはありますか (何度も何度も)? タイマーがある場合は、代わりにタイマーを使用するようにコードをリファクタリングしてください。とにかく、ループの本体にフラグを挿入し、フラグが設定されている場合はループを続行できます。
于 2013-06-04T04:21:00.603 に答える