ServiceBase.OnPause (Método)
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)

Sintaxis

Visual Basic (Declaración)
Protected Overridable Sub OnPause
Visual Basic (Uso)
Me.OnPause
C#
protected virtual void OnPause ()
C++
protected:
virtual void OnPause ()
J#
protected void OnPause ()
JScript
protected function OnPause ()
XAML
No aplicable.
Comentarios

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.

Ejemplo

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.

Visual Basic
    ' 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
C#
        // 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
            }
        }
Plataformas

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.

Información de versión

.NET Framework

Compatible con: 3.0, 2.0, 1.1, 1.0
Vea también

Page view tracker