ServiceBase.OnPause メソッド
アセンブリ: System.ServiceProcess (system.serviceprocess.dll 内)
構文
解説OnPause を使用して、サービスが Pause コマンドを受け取ったときに発生する処理を指定します。CanPauseAndContinue プロパティが true の場合、OnPause はオーバーライドされます。
サービス アドインを使用して、またはプログラムによって、一時中断されたサービスを継続する場合は、OnContinue 処理が実行され、サービスは再度アクティブになります。
Pause コマンドは、アプリケーションが特定のイベントに対して反応できるようにするだけです。OnPause は、実行するように定義していないサービスに対しては何も実行しません。
Pause はすべてのシステム リソースを解放する必要がないため、Pause 要求をサービスに送信しても、システム リソースは保持されます。たとえば、このプロセスでスレッドが開かれた場合は、サービスを停止するのではなく一時中断すると、スレッドを開いたままの状態に保つことができ、サービスを継続するときに再割り当ての必要がなくなります。すべてのシステム リソースを解放するように Pause を定義すると、Pause は Stop コマンドと同じように動作します。
CanPauseAndContinue を true に設定し、OnPause および OnContinue をオーバーライドして、SCM が Pause 要求または Continue 要求をサービスに渡すときに発生する処理を指定します。OnPause の処理を元に戻すには、OnContinue を実装する必要があります。
CanPauseAndContinue が false の場合、SCM は Pause 要求または Continue 要求をサービスに渡さないため、OnPause メソッドと OnContinue メソッドは、実装されている場合でも呼び出されません。SCM では、CanPauseAndContinue が false に設定されていると、Pause コントロールと Continue コントロールが無効になります。
使用例ServiceBase から派生したサービス クラスに対して OnPause メソッドを実装する例を次に示します。このコード例は、ServiceBase クラスのトピックで取り上げているコード例の一部分です。
' Pause the service. Protected Overrides Sub OnPause() ' Pause the worker thread. If Not (workerThread Is Nothing) AndAlso workerThread.IsAlive AndAlso (workerThread.ThreadState And System.Threading.ThreadState.Suspended Or System.Threading.ThreadState.SuspendRequested) = 0 Then #If LOGEVENTS Then System.Diagnostics.EventLog.WriteEntry("SimpleService.OnPause", DateTime.Now.ToLongTimeString() + _ " - Pausing the service worker thread.") #End If pause.Reset() Thread.Sleep(5000) End If If Not (workerThread Is Nothing) Then #If LOGEVENTS Then System.Diagnostics.EventLog.WriteEntry("SimpleService.OnPause", DateTime.Now.ToLongTimeString() + _ " OnPause - Worker thread state = " + workerThread.ThreadState.ToString()) #End If End If End Sub 'OnPause
// Pause the service. protected override void OnPause() { // Pause the worker thread. if ((workerThread != null) && (workerThread.IsAlive) && ((workerThread.ThreadState & (System.Threading.ThreadState.Suspended | System.Threading.ThreadState.SuspendRequested)) == 0)) { #if LOGEVENTS EventLog.WriteEntry("SimpleService.OnPause", DateTime.Now.ToLongTimeString() + " - Pausing the service worker thread."); #endif pause.Reset(); Thread.Sleep(5000); } if (workerThread != null) { #if LOGEVENTS EventLog.WriteEntry("SimpleService.OnPause", DateTime.Now.ToLongTimeString() + " OnPause - Worker thread state = " + workerThread.ThreadState.ToString()); #endif } }
// Pause the service. protected: virtual void OnPause() override { // Pause the worker thread. if ( (workerThread != nullptr) && (workerThread->IsAlive) && ((workerThread->ThreadState & (System::Threading::ThreadState::Suspended | System::Threading::ThreadState::SuspendRequested)) == (System::Threading::ThreadState)0) ) { Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Suspending the service worker thread.", "OnPause" ); workerThread->Suspend(); } if ( workerThread != nullptr ) { Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Worker thread state = " + workerThread->ThreadState.ToString(), "OnPause" ); } }
.NET Framework のセキュリティ
プラットフォームWindows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
バージョン情報
参照ServiceBase クラス
ServiceBase メンバ
System.ServiceProcess 名前空間
CanPauseAndContinue
OnContinue
OnPowerEvent
OnShutdown
OnStart
OnStop
OnCustomCommand
- ServiceBase.OnPause メソッドのページへのリンク