Si se implementa en una clase derivada, se ejecuta cuando el Administrador de control de servicios (SCM, Service Control Manager) envía a un comando Detener al servicio. Especifica las acciones que deben realizarse cuando un servicio deja de ejecutarse.
Espacio de nombres: System.ServiceProcess
Ensamblado: System.ServiceProcess (en system.serviceprocess.dll)

Sintaxis
Visual Basic (Declaración)
Protected Overridable Sub OnStop
protected virtual void OnStop ()
protected:
virtual void OnStop ()
protected function OnStop ()

Comentarios
Utilice OnStop para especificar el procesamiento que se produce cuando el servicio recibe un comando Detener.
Cuando el SCM recibe un comando Detener, utiliza el valor de CanStop para comprobar si el servicio acepta comandos Detener. Si CanStop es true, el comando Detener se pasa al servicio y se llama al método OnStop si está definido. Si OnStop no está implementado en el servicio, el SCM controla el comando Detener.
Si el valor de la propiedad CanStop es false, el SCM omite el comando Detener. No se pasa al servicio. El comando Detener devuelve una excepción y la produce.
Se espera que OnStop se reemplace en la clase derivada. Para que el servicio sea útil, OnStart y OnStop tienen que implementarse en la clase de servicio.

Ejemplo
En el ejemplo siguiente se muestra una implementación del método OnStop 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.
' Stop this service.
Protected Overrides Sub OnStop()
' New in .NET Framework version 2.0.
Me.RequestAdditionalTime(4000)
' Signal the worker thread to exit.
If Not (workerThread Is Nothing) AndAlso workerThread.IsAlive Then
#If LOGEVENTS Then
System.Diagnostics.EventLog.WriteEntry("SimpleService.OnStop", DateTime.Now.ToLongTimeString() + _
" - Stopping the service worker thread.")
#End If
pause.Reset()
Thread.Sleep(5000)
workerThread.Abort()
End If
If Not (workerThread Is Nothing) Then
#If LOGEVENTS Then
System.Diagnostics.EventLog.WriteEntry("SimpleService.OnStop", DateTime.Now.ToLongTimeString() + _
" - OnStop Worker thread state = " + workerThread.ThreadState.ToString())
#End If
End If
' Indicate a successful exit.
Me.ExitCode = 0
End Sub 'OnStop
// Stop this service.
protected override void OnStop()
{
// New in .NET Framework version 2.0.
this.RequestAdditionalTime(4000);
// Signal the worker thread to exit.
if ((workerThread != null) && (workerThread.IsAlive))
{
#if LOGEVENTS
EventLog.WriteEntry("SimpleService.OnStop", DateTime.Now.ToLongTimeString() +
" - Stopping the service worker thread.");
#endif
pause.Reset();
Thread.Sleep(5000);
workerThread.Abort();
}
if (workerThread != null)
{
#if LOGEVENTS
EventLog.WriteEntry("SimpleService.OnStop", DateTime.Now.ToLongTimeString() +
" - OnStop Worker thread state = " +
workerThread.ThreadState.ToString());
#endif
}
// Indicate a successful exit.
this.ExitCode = 0;
}

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