0

会社が提供する SDK を使用して、.net 4.0 で WinForm アプリを作成しました。アプリでは、sdk の一部であるサービスの状態をチェックしています (sdk をインストールすると実行されます)。サービス コントローラー クラスを使用してその状態をチェックしています。このようなもの。

private string CheckSDKService()
    {
        ServiceController sc = new ServiceController("MyService");

        switch (sc.Status)
        {
            case ServiceControllerStatus.Running:
                return "Running";
            case ServiceControllerStatus.Stopped:
                return "Stopped";
            default:
                return "Status Changing";
        }
    }

問題は、これを呼び出してステータスを定期的にポーリングし続けたくないということです。サービスが停止するたびに何らかの通知を受け取る方法はありますか? 私はすでに WMI を見てきましたが、WinForm c# アプリで使用する方法を理解できませんでした。NotifyServiceStatusChange もありますが、それは C++ であり、P\Invoke または COM を使用したくありません。このアプリは SDK のサンプル アプリであり、複雑にしたくありません。

4

1 に答える 1

1

以前のコメントと非常によく似たことをしました。あなたが購読できるイベントを持つクラスを書きました。これをワーカースレッドで実行し、数分ごとにポーリングします。返す代わりにイベントを発生させることを除いて、あなたが持っている方法とまったく同じように実装されています。その後、このクラスをリッスンして、プログラムが必要とすることを何でも行うことができます:)

于 2013-10-21T01:07:14.390 に答える