Si se implementa en una clase derivada, se ejecuta cuando el Administrador de control de servicios (SCM, Service Control Manager) envía un comando Pausar al servicio. Especifica las acciones que deben realizarse cuando un servicio realiza una pausa.
Espacio de nombres: System.ServiceProcess
Ensamblado: System.ServiceProcess (en system.serviceprocess.dll)
Visual Basic (Declaración)
Protected Overridable Sub OnPause
protected virtual void OnPause ()
protected:
virtual void OnPause ()
protected void OnPause ()
protected function OnPause ()
Hay que utilizar OnPause para especificar el procesamiento que tiene lugar cuando el servicio recibe un comando Pausar. Se espera que OnPause se reemplace cuando la propiedad CanPauseAndContinue sea true.
Cuando se hace que un servicio que estaba en pausa continúe (a través de la consola Servicios o mediante programación), el procesamiento de OnContinue se ejecuta y el servicio se vuelve a activar.
El comando Pausar sólo permite que la aplicación reaccione ante un evento específico. OnPause no realiza ninguna operación en el servicio que no se haya definido.
Si envía una solicitud Pausar al servicio, podrá conservar los recursos del sistema, ya que Pausar no necesita liberar todos los recursos del sistema. Por ejemplo, si el proceso ha abierto subprocesos, realizar una pausa en un servicio en vez de detenerlo puede permitir que los subprocesos permanezcan abiertos, obviando la necesidad de reasignarlos cuando continúe el servicio. Si define Pausar para que libere todos los recursos del sistema, se comportará como un comando Detener.
Para especificar el procesamiento que tiene que producirse cuando el Administrador de control de servicios (SCM, Service Control Manager) pasa una solicitud Pausar o Continuar al servicio, hay que establecer CanPauseAndContinue en true y reemplazar OnPause y OnContinue. Debe implementarse OnContinue para deshacer el procesamiento de OnPause.
Si el valor de la propiedad CanPauseAndContinue es false, el SCM no pasará las solicitudes Pausar o Continuar al servicio, de manera que no se llamará a los métodos OnPause y OnContinue aunque estén implementados. En el SCM, los controles Pause y Continue están deshabilitados cuando CanPauseAndContinue es false.
En el ejemplo siguiente se muestra una implementación del método OnPause para una clase de servicio derivada de ServiceBase. Este ejemplo de código forma parte de un ejemplo más amplio referente a la clase 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
}
}
Windows 98, Windows 2000 Service Pack 4, Windows Millennium, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter
Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.
.NET Framework
Compatible con: 3.0, 2.0, 1.1, 1.0