Process.EnableRaisingEvents Eigenschap

Definitie

Hiermee wordt opgehaald of ingesteld of de Exited gebeurtenis moet worden gegenereerd wanneer het proces wordt beëindigd.

public:
 property bool EnableRaisingEvents { bool get(); void set(bool value); };
[System.ComponentModel.Browsable(false)]
public bool EnableRaisingEvents { get; set; }
[<System.ComponentModel.Browsable(false)>]
member this.EnableRaisingEvents : bool with get, set
Public Property EnableRaisingEvents As Boolean

Waarde van eigenschap

trueals de Exited gebeurtenis moet worden gegenereerd wanneer het bijbehorende proces wordt beëindigd (via een exit of een aanroep naarKill()); anders. false De standaardwaarde is false. Houd er rekening mee dat zelfs als de waarde EnableRaisingEvents is, de Exited gebeurtenis wordt gegenereerd door de HasExited eigenschapstoegangsor, als wordt bepaald dat het falseproces is afgesloten.

Kenmerken

Voorbeelden

In het volgende codevoorbeeld wordt een proces gemaakt waarmee een bestand wordt afgedrukt. Hiermee stelt u de EnableRaisingEvents eigenschap in om ervoor te zorgen dat het proces de Exited gebeurtenis genereert wanneer deze wordt afgesloten. De Exited gebeurtenis-handler geeft procesgegevens weer.

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

class PrintProcessClass
{
    private Process myProcess;
    private TaskCompletionSource<bool> eventHandled;

    // Print a file with any known extension.
    public async Task PrintDoc(string fileName)
    {
        eventHandled = new TaskCompletionSource<bool>();

        using (myProcess = new Process())
        {
            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 \"{fileName}\":\n{ex.Message}");
                return;
            }

            // Wait for Exited event, but not more than 30 seconds.
            await Task.WhenAny(eventHandled.Task,Task.Delay(30000));
        }
    }

    // Handle Exited event and display process information.
    private void myProcess_Exited(object sender, System.EventArgs e)
    {
        Console.WriteLine(
            $"Exit time    : {myProcess.ExitTime}\n" +
            $"Exit code    : {myProcess.ExitCode}\n" +
            $"Elapsed time : {Math.Round((myProcess.ExitTime - myProcess.StartTime).TotalMilliseconds)}");
        eventHandled.TrySetResult(true);
    }

    public static async Task 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();
        await myPrintProcess.PrintDoc(args[0]);
    }
}
open System
open System.Diagnostics
open System.Threading.Tasks

let mutable myProcess = new Process()
let mutable eventHandled = TaskCompletionSource<bool>()

// Handle Exited event and display process information.
let myProcess_Exited (sender: obj) (e: EventArgs) =
    printfn $"Exit time    : {myProcess.ExitTime}\n"
    printfn $"Exit code    : {myProcess.ExitCode}\n"
    printfn $"Elapsed time : {round ((myProcess.ExitTime - myProcess.StartTime).TotalMilliseconds)}"
    eventHandled.TrySetResult true |> ignore

// Print a file with any known extension.
let printDoc fileName =
    task {
        eventHandled <- TaskCompletionSource<bool>()

        use myProcess = new Process()

        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.AddHandler(EventHandler myProcess_Exited)
            myProcess.Start() |> ignore
        with ex ->
            printfn $"An error occurred trying to print \"{fileName}\":\n{ex.Message}"

        // Wait for Exited event, but not more than 30 seconds.
        let! _ = Task.WhenAny(eventHandled.Task, Task.Delay(30000))
        ()
    }

[<EntryPoint>]
let main args =
    // Verify that an argument has been entered.
    if args.Length <= 0 then
        printfn "Enter a file name."
    else
        // Create the process and print the document.
        printDoc(args[0]).Wait() |> ignore

    0
Imports System.Diagnostics

Class PrintProcessClass

    Private WithEvents myProcess As Process
    Private eventHandled As TaskCompletionSource(Of Boolean)

    ' Print a file with any known extension.
    Async Function PrintDoc(ByVal fileName As String) As Task

        eventHandled = New TaskCompletionSource(Of Boolean)()
        myProcess = New Process
        Using myProcess
            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
                AddHandler myProcess.Exited, New EventHandler(AddressOf myProcess_Exited)
                myProcess.Start()

            Catch ex As Exception
                Console.WriteLine("An error occurred trying to print ""{0}"":" &
                vbCrLf & ex.Message, fileName)
                Return
            End Try

            ' Wait for Exited event, but not more than 30 seconds.
            Await Task.WhenAny(eventHandled.Task, Task.Delay(30000))
        End Using
    End Function

    ' Handle Exited event and display process information.
    Private Sub myProcess_Exited(ByVal sender As Object,
            ByVal e As System.EventArgs)

        Console.WriteLine("Exit time:    {0}" & vbCrLf &
            "Exit code:    {1}" & vbCrLf & "Elapsed time: {2}",
            myProcess.ExitTime, myProcess.ExitCode,
            Math.Round((myProcess.ExitTime - myProcess.StartTime).TotalMilliseconds))
        eventHandled.TrySetResult(True)
    End Sub

    Shared Sub Main(ByVal args As String())

        ' Verify that an argument has been entered.
        If args.Length <= 0 Then
            Console.WriteLine("Enter a file name.")
            Return
        End If

        ' Create the process and print the document.
        Dim myPrintProcess As New PrintProcessClass
        myPrintProcess.PrintDoc(args(0)).Wait()

    End Sub
End Class

Opmerkingen

De EnableRaisingEvents eigenschap geeft aan of het onderdeel moet worden gewaarschuwd wanneer het besturingssysteem een proces heeft afgesloten. De EnableRaisingEvents eigenschap wordt gebruikt in asynchrone verwerking om uw toepassing op de hoogte te stellen dat een proces is afgesloten. Als u wilt afdwingen dat uw toepassing synchroon wacht op een afsluitgebeurtenis (waardoor de verwerking van de toepassing wordt onderbroken totdat de afsluitgebeurtenis is opgetreden), gebruikt u de WaitForExit methode.

Note

Als u Visual Studio gebruikt en dubbelklikt op een Process-onderdeel in uw project, wordt automatisch een Exitedgebeurtenisdelegen en gebeurtenis-handler gegenereerd. Met aanvullende code wordt de EnableRaisingEvents eigenschap ingesteld op false. U moet deze eigenschap wijzigen zodat true de gebeurtenis-handler wordt uitgevoerd wanneer het bijbehorende proces wordt afgesloten.

Als de waarde van EnableRaisingEvents het onderdeel is true, of wanneer EnableRaisingEventsfalse en een HasExited controle wordt aangeroepen door het onderdeel, heeft het onderdeel toegang tot de beheergegevens voor het bijbehorende proces, dat door het besturingssysteem wordt opgeslagen. Deze informatie omvat de ExitTime en de ExitCode.

Nadat het bijbehorende proces is afgesloten, verwijst het Handle onderdeel niet meer naar een bestaande procesresource. In plaats daarvan kan het alleen worden gebruikt voor toegang tot de informatie van het besturingssysteem over de procesresource. Het besturingssysteem is zich ervan bewust dat er ingangen zijn voor afgesloten processen die niet zijn vrijgegeven door Process onderdelen, zodat de en Handle informatie ExitTime in het geheugen worden opgeslagen.

Er zijn kosten verbonden aan het controleren van een proces om af te sluiten. Als EnableRaisingEvents dat het geval is true, wordt de Exited gebeurtenis gegenereerd wanneer het bijbehorende proces wordt beëindigd. Uw procedures voor de uitvoering van de Exited gebeurtenis op dat moment.

Soms start uw toepassing een proces, maar vereist geen melding van de sluiting ervan. Uw toepassing kan bijvoorbeeld Kladblok starten om de gebruiker toe te staan tekst te bewerken, maar de toepassing Kladblok niet verder te gebruiken. U kunt ervoor kiezen om meldingen te voorkomen wanneer het proces wordt afgesloten, omdat dit niet relevant is voor de continue werking van uw toepassing. Instelling EnableRaisingEvents om systeembronnen op te false slaan.

Van toepassing op

Zie ook