Bagikan melalui


SystemEvents.SessionEnding Kejadian

Definisi

Terjadi ketika pengguna mencoba log keluar atau mematikan sistem.

public:
 static event Microsoft::Win32::SessionEndingEventHandler ^ SessionEnding;
public static event Microsoft.Win32.SessionEndingEventHandler SessionEnding;
public static event Microsoft.Win32.SessionEndingEventHandler? SessionEnding;
member this.SessionEnding : Microsoft.Win32.SessionEndingEventHandler 
Public Shared Custom Event SessionEnding As SessionEndingEventHandler 

Jenis Acara

Pengecualian

Pemberitahuan peristiwa sistem tidak didukung di bawah konteks saat ini. Proses server, misalnya, mungkin tidak mendukung pemberitahuan peristiwa sistem global.

Upaya untuk membuat utas jendela peristiwa sistem tidak berhasil.

Keterangan

Ini adalah peristiwa yang dapat dibatalkan. Mengatur properti ke Canceltrue akan meminta agar sesi terus berjalan. Ini tidak memberikan jaminan bahwa sesi tidak akan berakhir.

Jika Anda menggunakan SessionEnding dalam formulir Windows untuk mendeteksi logoff atau boot ulang sistem, tidak ada cara deterministik untuk memutuskan apakah Closing peristiwa akan diaktifkan sebelum peristiwa ini.

Jika Anda ingin melakukan beberapa tugas khusus sebelum Closing dipecat, Anda perlu memastikan bahwa SessionEnding diaktifkan sebelum Closing. Untuk melakukan ini, Anda perlu menjebak WM_QUERYENDSESSION dalam formulir dengan mengesampingkan WndProc fungsi. Contoh ini menunjukkan cara melakukan ini.

Private Shared WM_QUERYENDSESSION As Integer = &H11  
 Private Shared systemShutdown As Boolean = False  
 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)  
     If m.Msg = WM_QUERYENDSESSION Then  
         MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot")  
         systemShutdown = True  
     End If  
     ' If this is WM_QUERYENDSESSION, the closing event should be raised in the base WndProc.  
     MyBase.WndProc(m)  
 End Sub 'WndProc   
 Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing  
     If (systemShutdown) Then  
     ' Reset the variable because the user might cancel the shutdown.  
         systemShutdown = False  
         If (System.Windows.Forms.DialogResult.Yes = _  
                 MessageBox.Show("My application", "Do you want to save your work before logging off?", MessageBoxButtons.YesNo)) Then  
                 e.Cancel = True  
         Else  
                 e.Cancel = False  
         End If  
     End If  
 End Sub  
private static int WM_QUERYENDSESSION = 0x11;  
private static bool systemShutdown = false;  
protected override void WndProc(ref System.Windows.Forms.Message m)  
{  
    if (m.Msg==WM_QUERYENDSESSION)  
    {  
        MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");  
        systemShutdown = true;  
    }  

    // If this is WM_QUERYENDSESSION, the closing event should be  
    // raised in the base WndProc.  
    base.WndProc(ref m);  

} //WndProc   

private void Form1_Closing(  
    System.Object sender,   
    System.ComponentModel.CancelEventArgs e)  
{  
    if (systemShutdown)  
        // Reset the variable because the user might cancel the   
        // shutdown.  
    {  
        systemShutdown = false;  
        if (DialogResult.Yes==MessageBox.Show("My application",   
            "Do you want to save your work before logging off?",   
            MessageBoxButtons.YesNo))  
        {  
            e.Cancel = true;  
        }  
        else  
        {  
            e.Cancel = false;  
        }  
    }  
}  

Penting

Aplikasi konsol tidak menaikkan SessionEnding peristiwa.

Catatan

Kejadian ini hanya dinaikkan jika pompa pesan sedang berjalan. Dalam layanan Windows, kecuali formulir tersembunyi digunakan atau pompa pesan telah dimulai secara manual, kejadian ini tidak akan dinaikkan. Untuk contoh kode yang menunjukkan cara menangani peristiwa sistem dengan menggunakan formulir tersembunyi dalam layanan Windows, lihat SystemEvents kelas .

Perhatian

Karena ini adalah peristiwa statis, Anda harus melepaskan penanganan aktivitas Anda ketika aplikasi Anda dibuang, atau kebocoran memori akan dihasilkan.

Berlaku untuk

Lihat juga