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