Process.CloseMainWindow Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fecha um processo que tem uma interface do usuário enviando uma mensagem de fechamento para sua janela principal.
public:
bool CloseMainWindow();
public bool CloseMainWindow();
member this.CloseMainWindow : unit -> bool
Public Function CloseMainWindow () As Boolean
Retornos
true se a mensagem de fechamento foi enviada com êxito; false se o processo associado não tiver uma janela principal ou se a janela principal estiver desabilitada (por exemplo, se uma caixa de diálogo modal estiver sendo mostrada).
Exceções
Exemplos
O exemplo a seguir inicia uma instância do Bloco de Notas. Em seguida, recupera o uso de memória física do processo associado em intervalos de 2 segundos por um máximo de 10 segundos. O exemplo detecta se o processo é encerrado antes de 10 segundos terem decorrido. O exemplo fechará o processo se ele ainda estiver em execução após 10 segundos.
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);
}
}
}
}
open System.ComponentModel
open System.Diagnostics
open System.IO
open System.Threading
try
use myProcess = Process.Start "Notepad.exe"
// Display physical memory usage 5 times at intervals of 2 seconds.
let mutable i = 0
while i < 5 && not myProcess.HasExited do
// Discard cached information about the process.
myProcess.Refresh()
// Print working set to console.
printfn $"Physical Memory Usage: {myProcess.WorkingSet64}"
// Wait 2 seconds.
Thread.Sleep 2000
i <- i + 1
// Close process by sending a close message to its main window.
myProcess.CloseMainWindow() |> ignore
// Free resources associated with process.
myProcess.Close()
with
| :? Win32Exception
| :? FileNotFoundException as e ->
printfn "The following exception was raised: "
printfn $"{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
Comentários
Quando um processo está em execução, seu loop de mensagem está em um estado de espera. O loop de mensagem é executado sempre que uma mensagem do Windows é enviada ao processo pelo sistema operacional. A chamada CloseMainWindow envia uma solicitação para fechar a janela principal, que, em um aplicativo bem formado, fecha janelas filho e revoga todos os loops de mensagem em execução para o aplicativo. A solicitação para sair do processo chamando CloseMainWindow não força o aplicativo a sair. O aplicativo pode solicitar a verificação do usuário antes de sair ou pode se recusar a sair. Para forçar a desistência do aplicativo, use o Kill método. O comportamento é idêntico ao de CloseMainWindow um usuário fechando a janela principal de um aplicativo usando o menu do sistema. Portanto, a solicitação para sair do processo fechando a janela principal não força o aplicativo a sair imediatamente.
Os dados editados pelo processo ou recursos alocados para o processo podem ser perdidos se você chamar Kill. Kill causa uma terminação de processo anormal e deve ser usada somente quando necessário. CloseMainWindow permite uma terminação ordenada do processo e fecha todas as janelas, portanto, é preferível para aplicativos com uma interface. Se CloseMainWindow falhar, você poderá usar Kill para encerrar o processo. Kill é a única maneira de encerrar processos que não têm interfaces gráficas.
Você pode chamar Kill e CloseMainWindow somente para processos que estão em execução no computador local. Não é possível fazer com que os processos em computadores remotos sejam encerrados. Você só pode exibir informações para processos em execução em computadores remotos.