منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
(InvokeRequired & BeginInvoke(Deep Threading 3 - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : الاقسام الاخرى (http://vb4arb.com/vb/forumdisplay.php?fid=74)
+--- قسم : قسم المقالات العام (http://vb4arb.com/vb/forumdisplay.php?fid=85)
+--- الموضوع : (InvokeRequired & BeginInvoke(Deep Threading 3 (/showthread.php?tid=5388)



(InvokeRequired & BeginInvoke(Deep Threading 3 - RaggiTech - 08-10-12

كاتب الموضوع : 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 بنفسها


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