سؤال

العنوان حول هذا الموضوع. تطبيق WPF مع بعض الاشياء WCF ل IPC. أنا أتصل Application.Current.Shutdown() ويستمر التطبيق بسعادة. اعتقدت Shutdown كان من المفترض أن يكون لا يمكن وقفه.

ربما لأنه يتم استدعاء من خيط الخلفية؟ هل أحتاج إلى القيام ببعض ثبات المرسل؟

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

المحلول

يمكنك الحصول على استثناء عند الاتصال Application.Current.Shutdown في أي مؤشر ترابط غير الرئيسي، لذلك أفترض لك حيث تستخدم "مثال المرسل" بشكل صحيح بالفعل.

في أي حال، هذا يجمع وانساء تطبيقا، لذلك إذا كان BIT Probatucher لا يبدو وكأنه ما لديك يمكنك إلقاء حباله في:

ThreadStart ts = delegate()
    {
        Dispatcher.BeginInvoke((Action)delegate()
        {
            Application.Current.Shutdown();
        });
     };
 Thread t = new Thread(ts);
 t.Start();

نصائح أخرى

في تجربتي، يجب أن يتم إنهاء جميع المواضيع بشكل صريح أو يتم وضع علامة على خيوط الخلفية من أجل إغلاق التطبيق.

فيما يلي مثال على طرد موضوع قراءة في الخلفية:

_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();

ال IsBackground الملكية هي المفتاح. بدون هذه المجموعة، لن ينتهي الخيط عند استدعاء إيقاف التشغيل.

أنا فقط الخبرة Application.Current.Shutdown لا تعمل عندما أكون قيد التشغيل من Visual Studio. ضمن Visual Studio (إصدار 2010 على الأقل أنا أستخدمه) Application.Current.Shutdown لا تفعل شيئا. إذا قمت بخطوة واحدة من خلالها تنفذ هذا الخط ثم يستمر. إذا قمت بتشغيل البرنامج (ككسيك) من مستكشف Windows Application.Current.Shutdown يعمل بشكل جيد.

من المحتمل أن يكون هناك تفسير لذلك منذ أثناء تصحيح الأخطاء الأخرى نشطة، لكنني لا أستطيع أن أشرح ذلك.

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