(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Process.EnableRaisingEvents-Eigenschaft

Ruft ab oder legt fest, ob beim Beenden des Prozesses das Exited-Ereignis ausgelöst werden soll.

Namespace:  System.Diagnostics
Assembly:  System (in System.dll)

[BrowsableAttribute(false)]
public bool EnableRaisingEvents { get; set; }

Eigenschaftswert

Typ: System.Boolean
true , wenn das Exited-Ereignis ausgelöst werden soll, wenn der zugeordnete Prozess beendet wird (entweder durch Beenden oder einen Aufruf von Kill), andernfalls false. Die Standardeinstellung ist false.

Die EnableRaisingEvents-Eigenschaft gibt an, ob die Komponente benachrichtigt werden soll, wenn das Betriebssystem einen Prozess beendet hat. Die EnableRaisingEvents-Eigenschaft wird bei asynchroner Verarbeitung verwendet, um die Anwendung über die Beendigung eines Prozesses zu benachrichtigen. Um das synchrone Warten der Anwendung auf ein Beendigungsereignis zu erzwingen (wodurch die Verarbeitung der Anwendung bis zum Eintreten des Beendigungsereignisses unterbrochen wird), verwenden Sie die WaitForExit-Methode.

HinweisHinweis

Wenn Sie Visual Studio verwenden und auf eine Process-Komponente im Projekt doppelklicken, werden automatisch ein Exited-Ereignisdelegat und ein Ereignishandler generiert. Zusätzlicher Code legt die EnableRaisingEvents-Eigenschaft auf false fest. Sie müssen diese Eigenschaft in true ändern, damit der Ereignishandler beim Beenden des zugeordneten Prozesses ausgeführt wird.

Wenn der Wert der EnableRaisingEvents-Komponente auf true festgelegt ist und ein zugeordneter Prozess vom Betriebssystem ordnungsgemäß oder nicht ordnungsgemäß beendet wurde, benachrichtigt das Betriebssystem jede Prozesskomponente, der der Prozess zugeordnet war. Wenn der Prozess von einer Komponente gestartet wurde, kann diese anschließend auf die administrativen Informationen für den zugeordneten Prozess zugreifen, die vom Betriebssystem noch gespeichert werden. Diese Informationen beinhalten ExitTime und ExitCode.

Nach Beenden des zugeordneten Prozesses zeigt das Handle der Komponente nicht mehr auf eine vorhandene Prozessressource. Stattdessen können Sie damit nur auf die Informationen des Betriebssystems über die Prozessressource zugreifen. Das Betriebssystem berücksichtigt das Vorhandensein von Handles für beendete Prozesse, die nicht von Process-Komponenten freigegeben wurden, und behält daher Informationen zu ExitTime und Handle im Speicher.

Das Überwachen auf Beendigung von Prozessen ist mit einem gewissen Aufwand verbunden. Wenn EnableRaisingEvents auf true festgelegt ist, wird das Exited-Ereignis bei Beendigung des zugeordneten Prozesses ausgelöst. Die Prozeduren, die Sie für das Exited-Ereignis angegeben haben, werden zu dieser Zeit ausgeführt.

In einigen Fällen startet die Anwendung einen Prozess, muss jedoch nicht über dessen Beendigung benachrichtigt werden. Die Anwendung kann z. B. den Editor starten, um dem Benutzer die Bearbeitung von Texten zu ermöglichen, dann jedoch die Anwendung Editor nicht weiter verwenden. Sie können festlegen, dass Sie bei Beendigung des Prozesses nicht informiert werden, da dies für die weitere Ausführung der Anwendung nicht relevant ist. Durch Festlegen von EnableRaisingEvents auf false werden Systemressourcen gespart.

Im folgenden Codebeispiel wird ein Prozess erstellt, der eine Datei druckt. Die EnableRaisingEvents-Eigenschaft wird festgelegt, damit der Prozess das Exited-Ereignis auslöst, wenn er beendet wird. Der Exited-Ereignishandler zeigt Prozessinformationen an.


using System;
using System.Diagnostics;
using System.Threading;

class PrintProcessClass
{

    private Process myProcess = new Process();
    private int elapsedTime;
    private bool eventHandled;

    // Print a file with any known extension.
    public void PrintDoc(string fileName)
    {

        elapsedTime = 0;
        eventHandled = false;

        try
        {
            // Start a process to print a file and raise an event when done.
            myProcess.StartInfo.FileName = fileName;
            myProcess.StartInfo.Verb = "Print";
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.EnableRaisingEvents = true;
            myProcess.Exited += new EventHandler(myProcess_Exited);
            myProcess.Start();

        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred trying to print \"{0}\":" + "\n" + ex.Message, fileName);
            return;
        }

        // Wait for Exited event, but not more than 30 seconds.
        const int SLEEP_AMOUNT = 100;
        while (!eventHandled)
        {
            elapsedTime += SLEEP_AMOUNT;
            if (elapsedTime > 30000)
            {
                break;
            }
            Thread.Sleep(SLEEP_AMOUNT);
        }
    }

    // Handle Exited event and display process information.
    private void myProcess_Exited(object sender, System.EventArgs e)
    {

        eventHandled = true;
        Console.WriteLine("Exit time:    {0}\r\n" +
            "Exit code:    {1}\r\nElapsed time: {2}", myProcess.ExitTime, myProcess.ExitCode, elapsedTime);
    }

    public static void Main(string[] args)
    {

        // Verify that an argument has been entered.
        if (args.Length <= 0)
        {
            Console.WriteLine("Enter a file name.");
            return;
        }

        // Create the process and print the document.
        PrintProcessClass myPrintProcess = new PrintProcessClass();
        myPrintProcess.PrintDoc(args[0]);
    }
}


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

  • LinkDemand 

    für volle Vertrauenswürdigkeit für den unmittelbaren Aufrufer. Dieser Member kann von nur teilweise vertrauenswürdigem Code nicht verwendet werden.

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

Es werden nicht alle Versionen sämtlicher Plattformen von .NET Framework unterstützt.. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft