Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Process.Exited (Evento)

Se produce cuando termina un proceso.

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

public event EventHandler Exited

El evento Exited indica que el proceso asociado ha terminado. El hecho de que se produzca este evento significa que el proceso ha terminado porque ha sido anulado o que el proceso ha terminado correctamente. Este evento sólo puede provocarse si el valor de la propiedad EnableRaisingEvents es true.

La notificación de que el proceso ha terminado puede ser de dos formas: sincrónica y asincrónica. La notificación sincrónica se basa en una llamada al método WaitForExit para detener el procesamiento de la aplicación hasta que el componente asociado haya terminado. La notificación asincrónica se basa en el evento Exited. En cualquier caso, la propiedad EnableRaisingEvents debe establecerse en true para que el componente Process reciba la notificación de que el proceso ha terminado.

Cuando el sistema operativo cierra un proceso, cualquier componente del proceso que esté esperando para finalizarse recibe una notificación. Después, el componente puede obtener acceso a la información del proceso asociado, que todavía reside en la memoria del sistema operativo (como la propiedad ExitTime) mediante el uso del identificador del proceso.

Como el proceso asociado ha terminado, la propiedad Handle del componente ya no apunta 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 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 las propiedades ExitTime y Handle en memoria hasta que el componente Process libera los recursos expresamente.

NotaNota

Aunque todavía exista un identificador de un proceso terminado, no puede volver a llamar a Start para restablecer la conexión con el mismo proceso. Al llamar a Start, automáticamente se libera el proceso asociado y se establece una conexión con un proceso que tiene el mismo archivo pero cuya propiedad Handle es totalmente nueva.

Para obtener más información sobre el uso del evento Exited en aplicaciones de Windows Forms, consulte la propiedad SynchronizingObject.

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


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

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

  • LinkDemand 

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

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft