Process.CloseMainWindow Método

Definición

Cierra un proceso que contiene una interfaz de usuario mediante el envío de un mensaje de cierre a su ventana principal.Closes a process that has a user interface by sending a close message to its main window.

public:
 bool CloseMainWindow();
public bool CloseMainWindow ();
member this.CloseMainWindow : unit -> bool
Public Function CloseMainWindow () As Boolean

Devoluciones

Boolean

Es true si el mensaje de cierre se envió correctamente; es false si el proceso asociado no tiene una ventana principal o si la ventana principal está deshabilitada (por ejemplo, si se está mostrando un cuadro de diálogo modal).true if the close message was successfully sent; false if the associated process does not have a main window or if the main window is disabled (for example if a modal dialog is being shown).

Excepciones

El proceso ya se cerró.The process has already exited.

o bien-or- No hay ningún proceso asociado a este objeto Process.No process is associated with this Process object.

Ejemplos

En el ejemplo siguiente se inicia una instancia del Bloc de notas.The following example starts an instance of Notepad. A continuación, recupera el uso de memoria física del proceso asociado a intervalos de 2 segundos durante un máximo de 10 segundos.It then retrieves the physical memory usage of the associated process at 2 second intervals for a maximum of 10 seconds. En el ejemplo se detecta si el proceso finaliza antes de que transcurran 10 segundos.The example detects whether the process exits before 10 seconds have elapsed. En el ejemplo se cierra el proceso si aún se está ejecutando después de 10 segundos.The example closes the process if it is still running after 10 seconds.

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
   try
   {
      Process^ myProcess;
      myProcess = Process::Start(  "Notepad.exe" );
      
      // Display physical memory usage 5 times at intervals of 2 seconds.
      for ( int i = 0; i < 5; i++ )
      {
         if (  !myProcess->HasExited )
         {
            
            // Discard cached information about the process.
            myProcess->Refresh();
            
            // Print working set to console.
            Console::WriteLine( "Physical Memory Usage : {0}", myProcess->WorkingSet.ToString() );
            
            // Wait 2 seconds.
            Thread::Sleep( 2000 );
         }
         else
         {
            break;
         }

      }
      myProcess->CloseMainWindow();
      
      // Free resources associated with process.
      myProcess->Close();
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The following exception was raised: " );
      Console::WriteLine( e->Message );
   }

}

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace ProcessSample
{
    class MyProcessClass
    {
        public static void Main()
        {
            try
            {
                using (Process myProcess = Process.Start("Notepad.exe"))
                {
                    // Display physical memory usage 5 times at intervals of 2 seconds.
                    for (int i = 0; i < 5; i++)
                    {
                        if (!myProcess.HasExited)
                        {
                            // Discard cached information about the process.
                            myProcess.Refresh();
                            // Print working set to console.
                            Console.WriteLine($"Physical Memory Usage: {myProcess.WorkingSet}");
                            // Wait 2 seconds.
                            Thread.Sleep(2000);
                        }
                        else
                        {
                            break;
                        }
                    }

                    // Close process by sending a close message to its main window.
                    myProcess.CloseMainWindow();
                    // Free resources associated with process.
                    myProcess.Close();
                }
            }
            catch (Exception e) when (e is Win32Exception || e is FileNotFoundException)
            {
                Console.WriteLine("The following exception was raised: ");
                Console.WriteLine(e.Message);
            }
        }
    }
}
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.IO
Imports System.Threading

Namespace Process_Sample
    Class MyProcessClass

        Public Shared Sub Main()
            Try
                Using myProcess = Process.Start("Notepad.exe")
                    ' Display physical memory usage 5 times at intervals of 2 seconds.
                    Dim i As Integer
                    For i = 0 To 4
                        If Not myProcess.HasExited Then

                            ' Discard cached information about the process.
                            myProcess.Refresh()
                            ' Print working set to console.
                            Console.WriteLine($"Physical Memory Usage: {myProcess.WorkingSet}")
                            ' Wait 2 seconds.
                            Thread.Sleep(2000)
                        Else
                            Exit For
                        End If

                    Next i

                    ' Close process by sending a close message to its main window.
                    myProcess.CloseMainWindow()
                    ' Free resources associated with process.
                    myProcess.Close()
                End Using
            Catch e As Exception When TypeOf e Is Win32Exception Or TypeOf e Is FileNotFoundException
                Console.WriteLine("The following exception was raised: ")
                Console.WriteLine(e.Message)
            End Try
        End Sub
    End Class
End Namespace 'Process_Sample

Comentarios

Cuando se ejecuta un proceso, su bucle de mensajes se encuentra en un estado de espera.When a process is executing, its message loop is in a wait state. El bucle de mensajes se ejecuta cada vez que el sistema operativo envía un mensaje de Windows al proceso.The message loop executes every time a Windows message is sent to the process by the operating system. La llamada a CloseMainWindow envía una solicitud para cerrar la ventana principal, que, en una aplicación bien formada, cierra las ventanas secundarias y revoca todos los bucles de mensajes en ejecución para la aplicación.Calling CloseMainWindow sends a request to close the main window, which, in a well-formed application, closes child windows and revokes all running message loops for the application. La solicitud para salir del proceso mediante una llamada a CloseMainWindow no obliga a la aplicación a salir.The request to exit the process by calling CloseMainWindow does not force the application to quit. La aplicación puede solicitar la comprobación del usuario antes de salir o puede denegarse su cierre.The application can ask for user verification before quitting, or it can refuse to quit. Para forzar el cierre de la aplicación, use el Kill método.To force the application to quit, use the Kill method. El comportamiento de CloseMainWindow es idéntico al de un usuario que cierra la ventana principal de una aplicación mediante el menú del sistema.The behavior of CloseMainWindow is identical to that of a user closing an application's main window using the system menu. Por lo tanto, la solicitud para salir del proceso cerrando la ventana principal no obliga a la aplicación a salir inmediatamente.Therefore, the request to exit the process by closing the main window does not force the application to quit immediately.

Los datos editados por el proceso o los recursos asignados al proceso se pueden perder si se llama a Kill .Data edited by the process or resources allocated to the process can be lost if you call Kill. Kill provoca una terminación anómala del proceso y solo se debe usar cuando sea necesario.Kill causes an abnormal process termination, and should be used only when necessary. CloseMainWindow habilita una terminación ordenada del proceso y cierra todas las ventanas, por lo que es preferible para las aplicaciones con una interfaz.CloseMainWindow enables an orderly termination of the process and closes all windows, so it is preferable for applications with an interface. Si CloseMainWindow se produce un error, puede usar Kill para finalizar el proceso.If CloseMainWindow fails, you can use Kill to terminate the process. Kill es la única manera de terminar los procesos que no tienen interfaces gráficas.Kill is the only way to terminate processes that do not have graphical interfaces.

Solo puede llamar a Kill y a CloseMainWindow los procesos que se ejecutan en el equipo local.You can call Kill and CloseMainWindow only for processes that are running on the local computer. No puede hacer que los procesos de los equipos remotos salgan.You cannot cause processes on remote computers to exit. Solo puede ver información para los procesos que se ejecutan en equipos remotos.You can only view information for processes running on remote computers.

Se aplica a