ServiceBase.OnStop Method
Assembly: System.ServiceProcess (in system.serviceprocess.dll)
Use OnStop to specify the processing that occurs when the service receives a Stop command.
When the SCM receives a Stop command, it uses the value of CanStop to verify whether the service accepts Stop commands. If CanStop is true, the Stop command is passed to the service, and the OnStop method is called if it is defined. If OnStop is not implemented in the service, the SCM handles the Stop command.
If CanStop is false, the SCM ignores the Stop command. It is not passed to the service. The Stop command returns and throws an exception.
OnStop is expected to be overridden in the derived class. For the service to be useful, OnStart and OnStop should both be implemented in your service class.
The following example shows an implementation of the OnStop method for a service class derived from ServiceBase. This code example is part of a larger example provided for the ServiceBase class.
// Stop this service.
protected:
virtual void OnStop() override
{
// Signal the worker thread to exit.
if ( (workerThread != nullptr) && (workerThread->IsAlive) )
{
Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Stopping the service worker thread.", "OnStop" );
workerThread->Abort();
// Wait up to 500 milliseconds for the thread to terminate.
workerThread->Join( 500 );
}
if ( workerThread != nullptr )
{
Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Worker thread state = " + workerThread->ThreadState.ToString(), "OnStop" );
}
}
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
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.