تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
(InvokeRequired & BeginInvoke(Deep Threading 3
#1
كاتب الموضوع : SHADY_20075

بسم الله الرحمن الرحيم ولنكمل ما بدئناه

انظر معى هذا الكود متابعتا لما سبق شرحه


كود :
private delegate void ChangeDelegate();
public void InitThread()
{
Thread thread = new Thread(new ThreadStart(ChangeText));
thread.Start();
}

private void ChangeText()
{
if(this.InvokeRequired)
{
this.BeginInvoke(new ChangeDelegate(ChangeText), null);
return;
}
this.lblTest.Text = "Changed";
}
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
كيف أستطيع أن أحدد متى سأستخدم BeginInvoke و متى لن أستخدمها ؟؟


الجواب بسيط توجد داخل كل Control خاصية Property تدعى InvokeRequired و هي من نوع bool و تكون قيمتها ب False اذا كان الMain Thread هو الذي بقوم بتنفيذ InvokeRequired و تكون بtrue عندما تكون أي Thread أخرى ...
اذاً يمكننا الان فهم الكود السابق ببساطة فكل الفكرة فيه تكمن في الif condition التي تستشف من يقوم بتنفيذ هذا الكود فإذا كان الMain Thread فسيتم تغيير الText باستخدام الText Property مباشرة أما اذا كانت thread اخرى فسيتم ارسال رسالة بواسطة PostMessage من خلال BeginInvoke ووضعها في الMessageQueue و هنا عندما يأتي دور الMain Thread في التنفيذ فانها ستقوم بتغيير الText بنفسها


ونتابع سلسلة الدروس غدا انشاء الله
نسالكم صالح الدعاء
ولاتنسو الردود والاستفسارات للمتابعه معكم
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  درس-التشفير - الجزء الثانى(Deep in) RaggiTech 2 3,048 09-10-12, 06:44 PM
آخر رد: RaggiTech
  Windows Message Queue &amp; Message Pumping(Deep Threading 2) RaggiTech 0 1,797 08-10-12, 12:15 PM
آخر رد: RaggiTech
  Deep Threading in .net RaggiTech 1 1,945 08-10-12, 11:35 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم