Process.EnableRaisingEvents Свойство

Определение

Получает или задает значение, указывающее, следует ли вызывать событие Exited при прекращении процесса.Gets or sets whether the Exited event should be raised when the process terminates.

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

Значение свойства

Boolean

Значениеtrue , если событие Exited должно быть вызвано при завершении связанного процесса (выход или вызов метода Kill()); в противном случае — значение false.true if the Exited event should be raised when the associated process is terminated (through either an exit or a call to Kill()); otherwise, false. Значение по умолчанию — false.The default is false. Обратите внимание, что Exited событие возникает даже в том случае, если EnableRaisingEvents false во время или до завершения процесса пользователем проверки возникло значение HasExited .Note that the Exited event is raised even if the value of EnableRaisingEvents is false when the process exits during or before the user performs a HasExited check.

Атрибуты

Примеры

В следующем примере кода создается процесс, который выводит файл.The following code example creates a process that prints a file. Оно устанавливает EnableRaisingEvents свойство, чтобы процесс вызывал Exited событие при его выходе.It sets the EnableRaisingEvents property to cause the process to raise the Exited event when it exits. ExitedОбработчик событий отображает сведения о процессе.The Exited event handler displays process information.

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]);
    }
}
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

Комментарии

EnableRaisingEventsСвойство определяет, следует ли уведомлять компонент о том, что операционная система завершила процесс.The EnableRaisingEvents property suggests whether the component should be notified when the operating system has shut down a process. EnableRaisingEventsСвойство используется при асинхронной обработке для уведомления приложения о завершении процесса.The EnableRaisingEvents property is used in asynchronous processing to notify your application that a process has exited. Чтобы заставить приложение синхронно ожидать событие выхода (которое прерывает обработку приложения до возникновения события выхода), используйте WaitForExit метод.To force your application to synchronously wait for an exit event (which interrupts processing of the application until the exit event has occurred), use the WaitForExit method.

Примечание

Если вы используете Visual Studio и дважды щелкнули Process компонент в проекте, Exited автоматически создаются делегаты событий и обработчики событий.If you're using Visual Studio and double-click a Process component in your project, an Exited event delegate and event handler are automatically generated. В дополнительном коде EnableRaisingEvents свойству присваивается значение false .Additional code sets the EnableRaisingEvents property to false. Необходимо изменить это свойство на, чтобы true обработчик событий выполнялся при завершении связанного процесса.You must change this property to true for your event handler to execute when the associated process exits.

Если EnableRaisingEvents значение компонента равно true , или если параметр EnableRaisingEvents равен, false а HasExited Проверка вызывается компонентом, компонент может получить доступ к административной информации для связанного процесса, который остается в операционной системе.If the component's EnableRaisingEvents value is true, or when EnableRaisingEvents is false and a HasExited check is invoked by the component, the component can access the administrative information for the associated process, which remains stored by the operating system. Такие сведения включают ExitTime и ExitCode .Such information includes the ExitTime and the ExitCode.

После завершения связанного процесса Handle компонент компонента больше не указывает на существующий ресурс процесса.After the associated process exits, the Handle of the component no longer points to an existing process resource. Вместо этого он может использоваться только для доступа к информации операционной системы о ресурсе процесса.Instead, it can only be used to access the operating system's information about the process resource. Операционная система осведомлена о том, что существуют дескрипторы для завершенных процессов, которые не были освобождены Process компонентами, поэтому ExitTime данные и хранятся Handle в памяти.The operating system is aware that there are handles to exited processes that haven't been released by Process components, so it keeps the ExitTime and Handle information in memory.

Есть затраты, связанные с наблюдением за завершением процесса.There's a cost associated with watching for a process to exit. Если EnableRaisingEvents имеет значение true , Exited событие возникает при завершении связанного процесса.If EnableRaisingEvents is true, the Exited event is raised when the associated process terminates. Процедуры для Exited выполнения события в это время.Your procedures for the Exited event run at that time.

Иногда приложение запускает процесс, но не требует уведомления о его закрытии.Sometimes, your application starts a process but doesn't require notification of its closure. Например, приложение может запустить Блокнот, чтобы позволить пользователю выполнять редактирование текста, но не использовать приложение блокнота.For example, your application can start Notepad to allow the user to perform text editing but make no further use of the Notepad application. Вы можете избежать уведомления при завершении процесса, поскольку это не относится к продолжающейся работе приложения.You can choose to avoid notification when the process exits because it's not relevant to the continued operation of your application. Параметр EnableRaisingEvents для false может сохранять системные ресурсы.Setting EnableRaisingEvents to false can save system resources.

Применяется к

См. также раздел