0

アプリケーションのインストール済みサービスを再起動するために使用されるユーザーコントロールがあります。私はこのタスクを実行するためにバックグラウンドワーカーを使用しています。

ServiceControllerを使用してサービスを再起動しています。DO_WORKには、次のコードを記述しました。

 serviceController.Refresh();

                if (serviceController.Status == ServiceControllerStatus.Running)
                {
                    serviceController.Stop();
                    serviceController.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMinutes(1));
                }

                serviceController.Start();
                serviceController.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromMinutes(1));

ここで、このユーザーコントロールが配置されているウィンドウを閉じると、serviceControllerが破棄されます。

サービスを再起動し、それがまだ開始フェーズにあり、ユーザーがウィンドウを閉じると、serviceControllerが破棄され、do_workがエラーをスローします。

このシナリオのベストプラクティスは何でしょうか?

更新:これを行うことはできますか?

        public void Dispose(bool disposing)
        {
            if (!this.isDisposed)
            {
                if (disposing)
                {
                    if (this.Worker != null)
                    {
                        this.Worker.DoWork -= this.Worker_DoWork;
                        this.Worker.RunWorkerCompleted -= this.Worker_RunWorkerCompleted;
                    }
                }
            }
         }
4

0 に答える 0