السلام عليكم ....
بعد محاولتي القيام بمثال عن 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 بالأرقام أدى إلى توقف البرنامج .. فما بالكم إدا في التعامل مع اجراءات معقدة و طويلة ؟
و هل هناك طريقة لضمان عدم توقف البرنامج عن الإستجابة لفترة عند القيام بعدة عمليات في إن واحد ؟؟