Tutup paksa aplikasi saat sistem dimatikan

Saya memiliki aplikasi Windows Forms yang ketika Jendela Utama ditutup, ia menampilkan kotak dialog dasar, mengonfirmasi tindakan. Jika pengguna memutuskan untuk membatalkan, pintu keluar aplikasi dibatalkan.

Namun, ketika aplikasi sedang berjalan diminimalkan dan pengguna ingin mematikan PC, urutan pematian berhenti karena aplikasi saya menunggu pengguna untuk mengonfirmasi penutupan aplikasi (kotak dialog ditampilkan).

Saya berpikir untuk menambahkan pengatur waktu untuk membuat batas waktu dan jika tidak ada jawaban dalam jangka waktu tertentu, tutup aplikasi secara otomatis, tetapi meskipun ini cara untuk melakukannya, tentu BUKAN cara aplikasi lain melakukannya.

Jadi, solusi optimal apa yang dapat dilakukan untuk mengonfirmasi penghentian aplikasi pada setiap kasus, kecuali sistem sedang dimatikan?

Terima kasih!


person Jano Rajmond    schedule 15.11.2011    source sumber


Jawaban (5)


Dalam acara FormClosing Anda, periksa FormClosingEventArgs' CloseReason untuk melihat mengapa jendela ditutup. Jika CloseReason.WindowsShutDown maka jangan tampilkan dialog Anda dan jangan batalkan penutupan formulir Anda.

private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
    // Verify that we're not being closed because windows is shutting down.
    if (e.CloseReason != CloseReason.WindowsShutDown)
    {
        // Show your dialog / cancel closing. 
    }
}

Catatan: Anda mungkin juga ingin menyertakan CloseReason.TaskManagerClosing karena pengguna jelas-jelas ingin menutup aplikasi Anda dalam skenario tersebut dan pengelola tugas sudah meminta konfirmasi. Atau alternatifnya hanya tampilkan dialog Anda untuk CloseReason.UserClosing.

person Johannes Kommer    schedule 15.11.2011
comment
Terima kasih banyak. Ini sangat membantu saya! - person Jano Rajmond; 15.11.2011

Di event handler Penutupan, yang dapat Anda definisikan seperti ini:

    this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);

dan di mana saya kira Anda memposting dialog konfirmasi, Anda dapat memeriksa argumen CloseReason, dan tidak memposting dialog jika yang menyebabkannya adalah shutdown:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason == CloseReason.WindowsShutDown)
        {
            //do not show the dialog
        }
    }
person zmilojko    schedule 15.11.2011

SystemEvents dapat membantu Anda. SessionEnding terjadi ketika pengguna mencoba keluar atau mematikan sistem.

Microsoft.Win32.SystemEvents.SessionEnding += (sender, e) => DoYourJob();
person JiBéDoublevé    schedule 15.11.2011
comment
Ditto, berguna untuk situasi saya - berikan UI pengganti ke aplikasi yang tidak memiliki validasi, dan PC sangat terkunci sehingga Anda tidak dapat memulai ulang aplikasi jika Anda menutupnya. - person Roger Willcocks; 06.03.2014

Anda dapat menggunakan Acara Application.SessionEnding untuk memahami apakah sistem akan dimatikan

http://msdn.microsoft.com/en-us/library/system.windows.application.sessionending.aspx

person Massimiliano Peluso    schedule 15.11.2011

Anda dapat mendengarkan acara penutupan dan keluar dari aplikasi tanpa kotak pesan .

person H-Man2    schedule 15.11.2011