سؤال

أحاول معرفة ذلك الذي يجب أن أستخدمه. عند إغلاق حرائق تطبيق WinForm الخاصة بي من نموذج في وضع الحوار. يعمل هذا النموذج عامل خلفية يقوم بمزامنة DB مع DB البعيد وتعرض تقدمه في "نموذج البداية".

لدي طريقة مثل ذلك:

private void CloseMyApp()
{
    SaveUserSettings();

    splashForm = new SplashForm();
    splashForm.ShowDialog();

    Application.ExitThread();
    //Application.Exit();
}

ما هو ما أسميه لإغلاق تطبيقي القائمة -> الخروج وفي Form_FormClosing() حدث. Application.Exit() يعطي الخطأ التالي ->

تم تعديل مجموعة؛ قد لا تنفذ عملية التعداد.

الآن قرأت ذلك Environment.Exit() هو وحشي ويعني هناك ربما هناك خطأ في التطبيق الخاص بك (انظر هنا).

Application.ExitThread() يعمل لكنني أختلف أنه قد يبدو إلا أنه لا يبدو إلا لأنني لم أستخدمه أبدا قبل أن أكون متأكدا عندما يكون من المناسب عادة القيام بذلك.

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

المحلول

لسوء الحظ، لا تسبب المشكلة ناتجة عن أي من هذه، ويقيم فعليا (حتى لو لم تحصل على الرسالة) في كل هذه السيناريوهات.

مشكلتك هي:

عند إغلاق حرائق تطبيق WinForm الخاصة بي من نموذج في وضع الحوار. يعمل هذا النموذج عامل خلفية يقوم بمزامنة DB مع DB البعيد وتعرض تقدمه في "نموذج البداية".

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

أود أن أوصي بعدم استخدام أي من هذه - فقط اتصل myMainForm.Close() في حين أن. يجب أن يغلق النموذج الرئيسي الخاص بك، والتي سوف تطلق منطق الإغلاق الخاص بك بشكل مناسب. بمجرد إغلاق النموذج الرئيسي في التطبيق الخاص بك، سيتم إغلاقه بأمان.

نصائح أخرى

Environment.Exit() يستخدم لتطبيقات وحدة التحكم.

تريد استخدام: System.Windows.Forms.Application.Exit()

عن طريق الخروج من الخيط، فإنك تخرج فقط من سياق الخيط الحالي، مع ترك أي خيوط قد بدأت قيد التشغيل قيد التشغيل. أظن أن الخيط الذي يسبب الخطأ لا يزال قيد التشغيل، لذلك لديك أساسا ملثمين المشكلة، وليس العمل من حوله. سأحاول معرفة سبب الحصول على هذا الخطأ "Collection was modified; enumeration operation may not execute." عند الخروج. إنه يتعرض من قبل Application.Exit(), ، لكنها ليست سببها.

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