Process.CloseMainWindow Yöntem

Tanım

Ana penceresine bir Close iletisi göndererek Kullanıcı arabirimine sahip bir işlemi kapatır.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

Döndürülenler

kapatma iletisi başarıyla gönderildiyse true; ilişkili işlemin ana penceresi yoksa veya ana pencere devre dışıysa (örneğin, bir kalıcı iletişim kutusu gösteriliyorsa) false.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).

Özel Durumlar

İşlemden zaten çıkıldı.The process has already exited.

-veya--or- Bu Process nesnesiyle ilişkili işlem yok.No process is associated with this Process object.

Örnekler

Aşağıdaki örnek bir not defteri örneğini başlatır.The following example starts an instance of Notepad. Daha sonra, ilişkili işlemin fiziksel bellek kullanımını 2 saniyelik aralıklarla en fazla 10 saniye boyunca alır.It then retrieves the physical memory usage of the associated process at 2 second intervals for a maximum of 10 seconds. Örnek, işlemin 10 saniye geçtikten önce çıkıp çıkmadığını algılar.The example detects whether the process exits before 10 seconds have elapsed. Örnek, 10 saniye sonra hala çalışıyorsa işlemi kapatır.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

Açıklamalar

Bir işlem yürütürken ileti döngüsü bekleme durumunda olur.When a process is executing, its message loop is in a wait state. İleti döngüsü, işletim sistemi tarafından işleme her bir Windows iletisi gönderildiğinde yürütülür.The message loop executes every time a Windows message is sent to the process by the operating system. CloseMainWindow çağırmak, ana pencereyi kapatmak için bir istek gönderir. Bu, iyi biçimlendirilmiş bir uygulamadır, alt pencereleri kapatır ve uygulamanın tüm çalışan ileti döngülerini iptal eder.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. CloseMainWindow çağırarak işlemden çıkma isteği, uygulamayı çıkmaya zorlamaz.The request to exit the process by calling CloseMainWindow does not force the application to quit. Uygulama çıkmadan önce kullanıcı doğrulaması isteyebilir veya çıkmayı reddedebilirler.The application can ask for user verification before quitting, or it can refuse to quit. Uygulamayı çıkmaya zorlamak için Kill yöntemini kullanın.To force the application to quit, use the Kill method. CloseMainWindow davranışı, sistem menüsünü kullanarak bir uygulamanın ana penceresini kapatan bir kullanıcı ile aynıdır.The behavior of CloseMainWindow is identical to that of a user closing an application's main window using the system menu. Bu nedenle, ana pencereyi kapatarak işlemden çıkma isteği uygulamayı hemen çıkmaya zorlamaz.Therefore, the request to exit the process by closing the main window does not force the application to quit immediately.

Killçağırırsanız, işlem veya işleme ayrılan kaynaklar tarafından düzenlenen veriler kaybolabilir.Data edited by the process or resources allocated to the process can be lost if you call Kill. Kill, olağan dışı işlem sonlandırmasına neden olur ve yalnızca gerekli olduğunda kullanılmalıdır.Kill causes an abnormal process termination, and should be used only when necessary. CloseMainWindow, işlemin düzenli olarak sonlandırılmasını ve tüm pencereleri kapatmalarını sağladığından, arabirim içeren uygulamalar için tercih edilir.CloseMainWindow enables an orderly termination of the process and closes all windows, so it is preferable for applications with an interface. CloseMainWindow başarısız olursa, işlemi sonlandırmak için Kill kullanabilirsiniz.If CloseMainWindow fails, you can use Kill to terminate the process. Kill, grafik arabirimleri olmayan işlemlerin sonlandırılması için tek yoldur.Kill is the only way to terminate processes that do not have graphical interfaces.

Yalnızca yerel bilgisayarda çalışan süreçler için Kill ve CloseMainWindow çağırabilirsiniz.You can call Kill and CloseMainWindow only for processes that are running on the local computer. Uzak bilgisayarlardaki işlemlerin çıkmasına neden olamaz.You cannot cause processes on remote computers to exit. Yalnızca uzak bilgisayarlarda çalışan işlemlerle ilgili bilgileri görüntüleyebilirsiniz.You can only view information for processes running on remote computers.

Şunlara uygulanır