سؤال

وأنا أكتب حاليا تطبيق WPF التي لا حجة سطر الأوامر معالجة في App.xaml.cs (وهو أمر ضروري لأن الحدث بدء التشغيل ويبدو أن الطريقة الموصى بها للحصول على تلك الحجج). واستنادا إلى الحجج أريد أن الخروج من البرنامج عند هذه النقطة بالفعل الذي، بقدر ما أعرف، وينبغي أن يتم في WPF مع Application.Current.Shutdown() أو في هذه الحالة (وأنا في كائن التطبيق الحالي) وربما أيضا this.Shutdown() فقط.

والمشكلة الوحيدة هي أن هذا لا يبدو أن الحق في العمل. لقد خرج من مع المصحح ورمز بعد السطر Shutdown() لا يزال يعدم الأمر الذي يؤدي إلى أخطاء بعد ذلك في الأسلوب، منذ كنت أتوقع التطبيق لا أن يعيش فترة طويلة. أيضا الإطار الرئيسي (أعلن في سمة StartupUri في XAML) لا يزال يحصل على تحميل.

ولقد دققت في وثائق هذه الطريقة وجدت شيئا في تصريحات أن تقول لي أن لا ينبغي لي أن استخدامه أثناء Application.Startup أو Application على الإطلاق.

وهكذا، ما هو الطريق الصحيح للخروج من البرنامج في تلك المرحلة، ط. ه. معالج الأحداث Startup في كائن Application؟

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

المحلول

وإزالة أولا الممتلكات StartupUri من App.xaml ثم استخدم ما يلي:

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        bool doShutDown = ...;

        if (doShutDown)
        {
            Shutdown(1);
            return;
        }
        else
        {
            this.StartupUri = new Uri("Window1.xaml", UriKind.Relative);
        }
    }

نصائح أخرى

إذا قمت بإزالة StartupUri من app.xaml للتطبيق مع MainWindow كنت بحاجة للتأكد من إجراء المكالمة التالية في طريقة OnStartup بك وإلا لن إنهاء التطبيق عندما يغلق MainWindow الخاص بك.

this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;

وFrank Schwieterman، شيء على طول هذه الخطوط قد تساعدك مع قضية إطار وحدة التحكم الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top