كيفية منع ObjectDisposedException في C# عند وضع وتطبيق مخارج

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

  •  01-07-2019
  •  | 
  •  

سؤال

أنا CompSci الطالب ، إلى حد ما الجديد في C# و كنت أقوم "يوسيفوس المشكلة" البرنامج لفئة وأنا إنشاء زر خروج تلك المكالمات التطبيق.Exit() إلى الخروج في أي وقت ، ولكن إذا كان C# لا تزال تعمل على اللوحة و الضغط على الزر فإنه يلقي ObjectDisposedExeception عن كائن الرسومات.هل هناك أي طريقة لمنع هذا؟.كنت أفكر في محاولة{}الصيد أو تغيير منطقية أن أقول عملية الرسم أن تتوقف قبل أن تخرج ، ولكن أريد أن أعرف إذا كان هناك حل آخر.

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

المحلول

فإنه لا ينبغي أن يكون من الممكن لهذا أن يحدث.إذا كان الزر يتم إنشاؤه على نفس الموضوع النافذة ، فإنها تشترك في رسالة مضخة الطلاء معالج لا يمكن أن توقف التعامل مع الزر خروج.الرسالة التي تم النقر فوق الزر سوف تكون في قائمة الانتظار على موضوع رسالة الانتظار حتى الطلاء معالج العوائد.

عموما ، يجب أن تؤجل اللوحة إلى الطلاء معالج (أو تجاوز OnPaint) وفي كل مكان آخر أن كنت بحاجة إلى تحديث الشاشة اتصل التحكم يبطل الأسلوب.أن يقول النوافذ التي يحتاج منطقة طلاء و, مرة واحدة كل رسائل أخرى تم التعامل معها سوف تولد WM_PAINT الرسالة التي في نهاية المطاف سوف ندعو OnPaint ، والتي بدورها سوف الحريق الطلاء الحدث.

إذا موحية ، واستخدام System.Windows.Forms.Timer لتحريك كل إطار, بدلا من استخدام الخيط. System.Threading.Timer رد تنفيذها على threadpool لذا هم دائما على خطأ موضوع التلاعب في واجهة المستخدم.

نصائح أخرى

يجب أن يسمى Close() الأسلوب من النموذج الذي يحتوي على زر من أجل إغلاق النموذج بطريقة منظمة.إغلاق النموذج الرئيسي سوف يسبب التطبيق إلى الخروج بالنسبة لك على أي حال.

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