سؤال

أقوم ببعض الخيوط المتعددة وأستخدم Autoresetevents و ManualResetevents تتحكم في حلقة الرئيسية الخاصة بي. عندما "destryoing" الخيوط التي يتعين عليّ التخلص منها أيضًا ، هذا واضح.

لكنني رأيت طرقًا مختلفة كيفية التخلص من Waithandles ، ولست متأكدًا من أي منها صحيح:

النسخة 1

if (disposing)
{
 this.threadExitEvent.SafeWaitHandle.Dispose();
 this.threadExitEvent.Close();
 this.threadExitEvent = null;
 ....
}

الإصدار 2

if (disposing)
{
 this.threadExitEvent.Close();
 this.threadExitEvent = null;
 ....
}

الإصدار 3

if (disposing)
{
 this.threadExitEvent.Close();
 ....
}
هل كانت مفيدة؟

المحلول

الإصدار 2 هو ما سأذهب إليه ، حيث لا توجد حاجة إلى التمسك بها حديثًا WaitHandle, ، لذا وضعه على null فكرة جيدة. هذا أيضًا يجعل من الأسهل تكييف كائنك القدرة على التعافي من التخلص منه ، لأن كل ما عليك فعله هو التحقق لمعرفة ما إذا كان WaitHandle هو لاغية وإعادة إنشائها إذا كان الأمر كذلك.

ومع ذلك ، لن يصفع أحد يدك للذهاب مع الخيار 3.

لا تستخدم الخيار 1 ؛ إنها فكرة سيئة بشكل عام "الوصول إلى الداخل" من الأشياء والبدء في التخلص من الأعضاء. الدعوة Close (منذ Dispose طريقة من IDisposable يتم تنفيذها بشكل صريح ولديه رمز متطابق ل Close) تلقائيا رعاية التخلص من SafeWaitHandle. لا تفعل ذلك بنفسك.

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