17-08-13, 01:56 AM
لايمكنك التعامل مع الCotrols الا من الThread الذي أنشأها
فعندما تستخدم background worker فإنك تستخدم simi-thread
وبطيعة الحالة سيتم منعك من التعامل مع الادوات لأنك لم تنشأها من الsimi-thread
لايوجد سبب واضح لفعل لمنع المستخدم من الوصول الى الادوات
ولكن مايكروسوفت تحب الsafty ، فقررت عدم السماح لأي ثريد بالوصول الى الادوات المنشئة في ثريد اخر (ربما لاجل التنظيم في stuck تنفيذ الاوامر ..)
وهكذا لايمكنك الوصول لها إلا باستعمال الاستدعاء المباشر (invoke)
فهو يقوم بتنفيذ الكود على الاداة دون نقلها الى مكدسة الترتيب
فالكود العادي دون invoke (مثلا تغيير خلفية الفورم) ، لايتم تنفيذه مباشرة
بل يتم نقله الى مكدسة خاصة منظمة تعمل على تنفيذ هذا الكود عندما يتم يحين دوره
اعتقد ان invoke تستعمل دالة API المسمى sendMessage لإرسال الكود
ولكن وجب التنبيه على ضرورة استخدام invokeRequired قبل كود invoke للتأكد
لأن هناك مشكلة قد تحدث عندما تستخدم invoke وانت لست بحاجة له
فعندما تستخدم background worker فإنك تستخدم simi-thread
وبطيعة الحالة سيتم منعك من التعامل مع الادوات لأنك لم تنشأها من الsimi-thread
لايوجد سبب واضح لفعل لمنع المستخدم من الوصول الى الادوات
ولكن مايكروسوفت تحب الsafty ، فقررت عدم السماح لأي ثريد بالوصول الى الادوات المنشئة في ثريد اخر (ربما لاجل التنظيم في stuck تنفيذ الاوامر ..)
وهكذا لايمكنك الوصول لها إلا باستعمال الاستدعاء المباشر (invoke)
فهو يقوم بتنفيذ الكود على الاداة دون نقلها الى مكدسة الترتيب
فالكود العادي دون invoke (مثلا تغيير خلفية الفورم) ، لايتم تنفيذه مباشرة
بل يتم نقله الى مكدسة خاصة منظمة تعمل على تنفيذ هذا الكود عندما يتم يحين دوره
اعتقد ان invoke تستعمل دالة API المسمى sendMessage لإرسال الكود
ولكن وجب التنبيه على ضرورة استخدام invokeRequired قبل كود invoke للتأكد
لأن هناك مشكلة قد تحدث عندما تستخدم invoke وانت لست بحاجة له

