Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Esta documentación está archivada y no tiene mantenimiento.

Process.EnableRaisingEvents (Propiedad)

Obtiene o establece si el evento Exited debe provocarse cuando termine el proceso.

Espacio de nombres:  System.Diagnostics
Ensamblado:  System (en System.dll)

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

Valor de propiedad

Tipo: System.Boolean
Es true si el evento Exited debe provocarse cuando termine el proceso asociado (al salir o al llamar a Kill); de lo contrario, es false. El valor predeterminado es false.

La propiedad EnableRaisingEvents indica si el componente debe recibir una notificación cuando el sistema operativo cierre un proceso. La propiedad EnableRaisingEvents se utiliza en procesos asincrónicos para notificar a la aplicación que se ha salido de un proceso. Para obligar a la aplicación a que espere de forma sincrónica a que se produzca un evento de cierre (que interrumpa el procesamiento de la aplicación hasta que se produzca dicho evento), utilice el método WaitForExit.

NotaNota

Si está utilizando Visual Studio y hace doble clic en un componente Process de su proyecto, automáticamente se generan un delegado del evento Exited y un controlador de eventos. El código adicional establece la propiedad EnableRaisingEvents en false. Debe cambiar esta propiedad a true para que el controlador de eventos se ejecute cuando termine el proceso asociado.

Cuando un proceso asociado persiste después de haber sido interrumpido por el sistema operativo a través de una terminación normal o bien de una terminación anómala, el sistema operativo envía una notificación a cada componente al que el proceso estaba asociado, siempre y cuando el valor de la propiedad EnableRaisingEvents del componente sea true. Si el proceso fue iniciado por un componente, este último puede obtener acceso a la información administrativa del proceso asociado, que el sistema operativo todavía almacena. Entre esta información se incluye ExitTime y ExitCode.

Una vez que el proceso asociado deja de existir, la propiedad Handle del componente deja de apuntar a un recurso del proceso existente. En lugar de ello, sólo puede utilizarse para obtener acceso a la información del sistema operativo acerca del recurso del proceso. El sistema operativo reconoce la existencia de identificadores de procesos terminados que no han sido liberados por los componentes Process, por lo que mantiene la información de ExitTime y Handle en la memoria.

Hay un costo asociado al hecho de estar al tanto de que un proceso termine. Si la propiedad EnableRaisingEvents es true, cuando el proceso asociado termina, se provoca el evento Exited. En ese momento, se ejecutan los procedimientos especificados para el evento Exited.

Pero hay ocasiones en las que la aplicación inicia un proceso, y no necesita recibir una notificación de que dicho proceso ha terminado. Por ejemplo, la aplicación inicia el Bloc de notas para permitirle al usuario editar texto, pero no se hace un uso posterior del mismo. Puede optar por no recibir una notificación cuando el proceso termine, ya que no es relevante para que la aplicación siga funcionando. Si establece la propiedad EnableRaisingEvents en false, ahorrará recursos del sistema.

En el ejemplo de código siguiente se crea un proceso que imprime un archivo. Se establece el valor de la propiedad EnableRaisingEvents para que el proceso provoque el evento Exited al salir. El controlador de eventos Exited muestra información del proceso.


using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Threading;
using Microsoft.VisualBasic;

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

Compatible con: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

  • LinkDemand 

    para plena confianza del llamador inmediato. Este miembro no puede ser utilizado por código de confianza parcial.

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Mostrar: