Freigeben über


ServiceBase.OnPause-Methode

Wird bei der Implementierung in einer abgeleiteten Klasse ausgeführt, wenn der Dienststeuerungs-Manager einen Befehl zum Anhalten an den Dienst sendet. Gibt Aktionen an, die beim Anhalten eines Diensts durchgeführt werden müssen.

Namespace: System.ServiceProcess
Assembly: System.ServiceProcess (in system.serviceprocess.dll)

Syntax

'Declaration
Protected Overridable Sub OnPause
'Usage

Me.OnPause
protected virtual void OnPause ()
protected:
virtual void OnPause ()
protected void OnPause ()
protected function OnPause ()

Hinweise

Geben Sie mit OnPause die Verarbeitungsvorgänge an, die durchgeführt werden, wenn der Dienst einen Befehl zum Anhalten empfängt. OnPause muss überschrieben worden sein, wenn die CanPauseAndContinue-Eigenschaft true ist.

Wenn Sie den Betrieb eines angehaltenen Diensts (entweder über das Add-In Dienste oder programmgesteuert) wieder aufnehmen, wird die Verarbeitung von OnContinue ausgeführt und der Dienst wieder aktiviert.

Der Befehl Pause ermöglicht es der Anwendung nur, auf ein bestimmtes Ereignis zu reagieren. OnPause führt nur die Aktionen für den Dienst aus, die von Ihnen definiert werden.

Durch das Senden einer Anforderung zum Anhalten des Diensts können Systemressourcen beibehalten werden, da Anhalten nicht alle Systemressourcen freigeben muss. Wenn z. B. Threads durch den Prozess geöffnet wurden, können diese geöffnet bleiben, wenn der Prozess nur angehalten und nicht beendet wird. Die Threads müssen daher beim Wiederaufnehmen des Diensts nicht erneut reserviert werden. Wenn Sie Pause dahingehend definieren, dass alle Systemressourcen freigegeben werden, verhält sich dieser Befehl so wie der Befehl Anhalten.

Legen Sie CanPauseAndContinue auf true fest, und überschreiben Sie OnPause und OnContinue, um die Verarbeitungsvorgänge anzugeben, die auszuführen sind, wenn eine Anforderung zum Anhalten oder Fortsetzen vom Dienststeuerungs-Manager an den Dienst übergeben wird. OnContinue muss implementiert werden, um die Verarbeitung in OnPause rückgängig zu machen.

Wenn CanPauseAndContinuefalse ist, übergibt der Dienststeuerungs-Manager keine Anforderungen zum Anhalten oder Fortsetzen an den Dienst, sodass die OnPause-Methode und die OnContinue-Methode nicht aufgerufen werden, selbst wenn sie implementiert sind. Im Dienststeuerungs-Manager sind die Steuerelemente Pause und Continue deaktiviert, wenn CanPauseAndContinuefalse ist.

Beispiel

Im folgenden Beispiel wird eine Implementierung der OnPause-Methode für eine von ServiceBase abgeleitete Dienstklasse veranschaulicht. Dieses Codebeispiel ist Teil eines umfangreicheren Beispiels für die ServiceBase-Klasse.

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

.NET Framework-Sicherheit

  • Volle Vertrauenswürdigkeit für den unmittelbaren Aufrufer. Dieser Member kann von nur teilweise vertrauenswürdigem Code nicht verwendet werden. Weitere Informationen finden Sie unter .

Plattformen

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 unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

ServiceBase-Klasse
ServiceBase-Member
System.ServiceProcess-Namespace
CanPauseAndContinue
OnContinue
OnPowerEvent
OnShutdown
OnStart
OnStop
OnCustomCommand