الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

توقف البرنامج عن الإستجابة حتى عند استخدام Multithread ... !

مغلق
بدأه Fikou-sama في 24 نوفمبر 2007 · 4 رد · 574 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ....

بعد محاولتي القيام بمثال عن MultiThread ظهر لي خطأ :

Cross-thread operation not valid: Control 'ComboBox1' accessed from a thread other than the thread it was created on.

و بعد بحثي في google لاحظت أن هناك حلان .. الحل الأول

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False

لكني عرفت فيما بعد أن هده الطريقة ليست مضمونة حيث ستؤثر على جميع Thread الفرعية في البرنامج .. ودلك قد يودي إلى توقف البرنامج عن العمل دون سابق اندار .. إدن هده هي اسوأ طريقة للتعامل مع هدا الخطأ ..

أما الطريقة الثانية فهي استعمال Invoke ..

	Private Sub XXX()
		If Me.InvokeRequired Then
			Me.Invoke(New MethodInvoker(AddressOf XXX))
		Else
			.
			.
			.
		End If
	End Sub

إلى حد الأن كل شيء يبدو جيدا و هده المشكلة تبدو محلولة .. لكن بعد محاولتي تعبئة Combobox بالأرقام من 0 إلى 100000 تبين لي أنه حتى مع تنفيد هدا الإجراء على Thread آخر فإنه أثر كثيرا على Thread الرئيسي حيث توقف البرنامج عن العمل لفترة ..

أدن سؤالي هو .. ادا كان اجراء تعبئة Combobox بالأرقام أدى إلى توقف البرنامج .. فما بالكم إدا في التعامل مع اجراءات معقدة و طويلة ؟

و هل هناك طريقة لضمان عدم توقف البرنامج عن الإستجابة لفترة عند القيام بعدة عمليات في إن واحد ؟؟

تم تعديل هذه المشاركة بواسطة Fikou-sama في 24 نوفمبر 2007 في 02:08

مقالاتي في VB.NET وبرامجي على موقعي الجديد :

#2

السلام عليكم

حسب رأيي المتواضع ، يجب أن تكون ملما بالتعامل مع thread وتفهم كيف تعمل تماما حتى لا تقع في مزالق ، فهي تقنية تستخدم كأي تقنية أخرى ، فيجب الإلمام بها وأنصحك أن تطالع كتاب pthread primer هو مجاني لكنه قوي

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#3

شكرا أخي على المرور ...

مقالاتي في VB.NET وبرامجي على موقعي الجديد :

#4

المشكلة التي واجهتك بكل بساطة هي انك تحاول استعمال اداة انشأت في ال Thread الرئيسية من خلال Thread اخرى

حاول مراجعة هذين الموضوعين و ستجد الحل باذن الله :

أداة ال BACKGROUNDWORKER

العنصر BackgroundWorker تحت المِجِهر

#5

شكرا أخي على الروابط ...

مقالاتي في VB.NET وبرامجي على موقعي الجديد :

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…