0

Windows サービスとして展開された単一の exe から 2 つのサービスを作成しました。各サービスは、dll(ク​​ラス ライブラリ プロジェクト)に対応しています。サービスを停止すると、dll がアンロードされず、この dll に対応するコードが引き続き実行されます。定期的に実行されるポーラーがあり、これはサービスがシャットダウンされてもポーリングを続けます。サービスが停止したときに対応する dll をアンロードするにはどうすればよいですか?

4

1 に答える 1

0

dll のアンロードは、ドットネットで行う方法ではありません。サービス クラスの onStop() メソッドをオーバーライドする必要があります。対応する dll にポーリングへの応答を控えるように通知するフラグを設定します。ポーラースレッドを強制終了するか、セマフォを使用して、開始/再開されるまでスレッドをブロックすることをお勧めします。

いくつかのコードを示していただければ、さらにお手伝いできます。推測、

ポーリングプロセスをトリガーするタイマーはありますか? 次に、そのタイマーを停止/破棄します。サービスの OnStart() で新しいタイマーを作成します。別の方法は、タイマーのコールバックでフラグを確認することです。

ポーリングを行う無限 while ループはありますか (何度も何度も)? タイマーがある場合は、代わりにタイマーを使用するようにコードをリファクタリングしてください。とにかく、ループの本体にフラグを挿入し、フラグが設定されている場合はループを続行できます。

于 2013-06-04T04:21:00.603 に答える