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" ); } }


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
Weblioに収録されているすべての辞書からServiceBase.OnPause メソッドを検索する場合は、下記のリンクをクリックしてください。

- ServiceBase.OnPause メソッドのページへのリンク