عنوان الدرس: Multithreading تعدد العمليات
سنتعلم في هذا الدرس كيفية جعل الفورم يفتح بسرعة باستخدام تقنية تعدد العمليات
ماهو الفورم السريع؟ وما فائدته ؟
سأضرب لك مثالاًَ حتى تتضح الصورة
تخيل أنك تملك نموذجا في برنامجك وعليه عدد كبير من حقول البيانات ومن بينها قوائم سرد وتحرير ComboBoxes وهذه القوائم قد تحتوي على الآلاف من البنود Items فمثلا هناك قائمة بأسماء المدن وقائمة بالجنسيات وقائمة بأسماء الشركات ... وهذه القوائم قد تستمد البيانات من السيرفر من خلال الشبكة , فمذا يحدث للفورم عند فتحه ؟ سيستغرق بعض الوقت وقد يصل إلى دقيقة أو أكثر . وإذا كان برنامجك كبير ويحتوي على الكثير من هذه النماذج فهذا يعني أن المستخدم سينجز عمله ببطئ وسيستغرق أضعاف الوقت لأنه في كل خطوة عليه أن ينتظر. من هنا جائت فكرة تعدد المهام أي أن يسمح للمستخدم بأن يعمل أشياء أخرى أثناء تحميل أثناء تحميل البيانات على النموذج أو أثناء إنجاز أي عملية.
ومن خلال المثال التالي سنرى كيف نفتح نموذجين عليهما قائمتي تحرير وسرد يتم تعبئتها بالأرقام من 1 إلى 100000 ويتم فتح النموذج الثاني والثالث من خلال النموذج الأول وسنفتح النموذج الثاني بالطريقة العادية وسنفتح النموذج الثالث باستخدام تقنية تعدد المهام
الخطوات:
1- أنشئ مشروعاًَ جديداًَ وسمه Thread Form
2- أضف إلى المشروع نموذجين جديدن إضافة إلى النموذج الذي ينشئ تلقائياًَ
3- أدرج زرين (Bottons) على النموذج الأول
4- أدرج على النموذج الثاني قائمة تحرير وسرد (ComboBox)
5- أدرج على النموذج الثالث قائمة تحرير وسرد (ComboBox)
6- إذهب إلى النموذج الثاني وأنقر بزر الماوس الأيسر مرتين على الزر الأول Botton1 ثم أكتب التالي
Dim SecForm As New Form2 SecForm.ShowDialog()
هذا الكود يقوم بفتح النموذج الثاني عند النقر
7- أنقر بزر الماوس الأيسر مرتين على الزر الثاني Botton2 ثم أكتب التالي :
Dim ThirdForm As New Form3 ThirdForm.ShowDialog()
هذا الكود يقوم بفتح النموذج الثالث عند النقر
8- اكتب في حدث التحميل Load للنموذج الثاني التالي :
Dim i As Int64 = 0 Do While i < 100000 Me.ComboBox1.Items.Add(i) i += 1 Loop
هذا الكود يقوم بتعبئة قائمة التحرير والسرد بالأرقام من 1 إلى 100000
9- في النموذج الثالث إستورد في بداية المشروع هذا الفضاء Imports System.Threading
11- اكتب البروسيجر التالي والذي سنستدعيه باستخدام تقنية تعدد المهام (Thead) ووظيفته تعبئة قائمة التحرير والسرد الموجودة على الفورم الثالث:
Private Sub FillComboBox1() Dim i As Int64 = 0 Do While i < 100000 Me.ComboBox1.Items.Add(i) i += 1 Loop End Sub
10- عرف المتغير UseThreading من نوع Thread وحدد إسم الدالة FillComboBox1 كمرجع ، ضعه تحت جملة " Windows form designer generated code "
Public UseThreading As New Thread(AddressOf FillComboBox1)
12- اكتب في حدث التحميل Load للنموذج الثالث التالي :
UseThreading.Start()
هذا السطر سيجعل تقنية تعدد المهام تطبق على البروسيجر FillComboBox1
13- أخيراًَ في حدث إغلاق النموذج الثالث Form3_Closing أكتب التالي:
UseThreading.Abort() UseThreading.Join()
هذا الكود يقوم بإنهاء تعدد العمليات في حالة طلب المستخدم إغلاق النموذج قبل أن تنتهي.
شغل البرنامج (Run) وجرب فتح النموذج الثاني والثالث ستلاحظ أن النموذج الثاني استغرق تقريبا 10 ثواني أما النموذج الثالث سيفتح مباشرة بينما يتم ملئ الComboBox بالأرقام
وهذا المثال مرفق في الأسفل
