الطريق الصحيح لإغلاق تطبيق واجهة المستخدم الرسومية WPF: getCurrentProcess (). Kill () ، evale.exit (0) أو this.shutdown ()

StackOverflow https://stackoverflow.com/questions/3880836

سؤال

يعمل برنامج WPF 4.0 (C# .NET 4.0) على أساس سطح مكتب واجهة المستخدم الرسومية مع قاعدة بيانات SQL Server. في كل مرة عندما أقوم بتشغيل طلبي ، يقوم بإنشاء اتصال بخادم SQL عبر إطار عمل ado.net ، وإذا لم يتمكن SQL Server من الوصول إليه ، فهو يلقي استثناءً ويظهر MessageBox بإخطار.

الآن أريد ذلك بعد قراءة المستخدم الذي سيتم إيقاف تشغيل تطبيق الرسالة هذا. لقد وجدت ثلاث طرق للقيام بذلك:

Process.GetCurrentProcess().Kill();

أو

this.Shutdown(); // Application.Current.Shutdown()

أو

System.Environment.Exit(0);

كلهم يعملون بشكل جيد ويفعلون ما أحتاجه - تطبيق تطبيق وقتل التطبيق في Windows Task Manager.

أريد أن أعرف:

  1. ما الفرق بينهم؟
  2. ما هي الطريقة التي ستغلق طلبي بشكل أسرع؟
  3. ما هي طريقة لإغلاق التطبيق الذي يجب أن أستخدمه؟
  4. هو Application.Current.Shutdown() و this.Shutdown() بنفس الطريقة لإغلاق التطبيق؟

أو ربما هناك طريقة أخرى أكثر ملاءمة ، لإغلاق تطبيق واجهة المستخدم الرسومية WPF؟

Application.Exit() لا تعمل من أجلي عندما أحصل على الخطأ:

الحدث 'System.Windows.Application.Exit'لا يمكن أن تظهر إلا على الجانب الأيسر من += أو -= =

شكرًا.

هل كانت مفيدة؟

المحلول

Application.Current.Shutdown() هي الطريقة الصحيحة لإغلاق التطبيق. بشكل عام لأن أحداث الخروج التي يمكنك التعامل معها أكثر

Process.GetCurrentProcess().Kill() يجب استخدامها عندما تريد قتل التطبيق. أكثر

AD1. طبيعة تلك الأساليب مختلفة تماما. يمكن إيقاف عملية إيقاف التشغيل لإنهاء بعض العمليات ، مما يؤدي إلى إغلاق طلب الإغلاق.

AD2. المحتمل Kill() ستكون أسرع طريقة ، ولكن هذا شيء مثل ذعر kernel.

AD3. الإغلاق لأنه يطلق الحدث القريب

AD4. هذا يعتمد على ما this هو.

نصائح أخرى

يستخدم application.current.shutdown () ؛

يضيف stheDdownMode = "onMainwindowClose" في app.xaml

private void ExitMenu_Click(object sender, RoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }

Damian Leszczyński - تغطي إجابة Vash إلى حد كبير الأسئلة الأربعة المحددة التي طرحتها. لسؤالك الأخير على Application.Exit(), ، هذا حدث يمكنك الاشتراك فيه ، وليس طريقة يمكنك الاتصال بها. يجب استخدامه مثل هذا:

Application.Current.Exit += CurrentOnExit; 
//this.Exit += CurrentOnExit; would also work if you're in your main application class

...

private void CurrentOnExit(object sender, ExitEventArgs exitEventArgs)
{
    //do some final stuff here before the app shuts down
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top