26-10-17, 09:14 AM
(آخر تعديل لهذه المشاركة : 26-10-17, 10:01 AM {2} بواسطة silverlight.)
واحدة من المشاكل التي تقابل المبرمج هي قراءة بيانات من مصفوفة ذات حجم كبير
هذه المشكلة غالبا يعاني منها مبرمجي الداتا بيز خاصة عندم يتضخم الملف و يمتلأ بالبيانات و يتحول الأمر الي معاناة ويؤدي ذلك الي بطء في اظهار البيانات علي الشاشة
غالبا الحلول تكمن في استخدام thread مثل Backgroundworker او شئ مماثل
اغلب Thread تعتمد علي تايمر و الفكرة التالية توضح كيف تملأ ListtBox بإستخدام تايمر بدلا من استخدام thread
دون أن يؤثر ذلك علي كفاءة البرنامج أو يؤدي الي تهنيج
لتنفيذ الفكرة
افتح مشروع ........
اضف للفورم ليست بوكس
أضف تايمر
واكتب الكود بالشكل التالي
المثال التالي يوضح كيف تقرأ البيانات و تملأ البيانات في نفس الوقت
الفكرة مثل Synchronize
لتنفيذ الفكرة
افتح مشروع
اضف عدد 2 تايمر
اضف ليست بوكس للفورم
واكتب الكود بالشكل التالي
أهم شئ في الموضوع أن التايمر الذي يقرأ يجب أن يكون أسرع من التايمر الذي يملأ الليست بوكس
الفكرة يمكن تطويرها لقراءة بيانات من ملف ضخم
تقبلوا تحياتي
هذه المشكلة غالبا يعاني منها مبرمجي الداتا بيز خاصة عندم يتضخم الملف و يمتلأ بالبيانات و يتحول الأمر الي معاناة ويؤدي ذلك الي بطء في اظهار البيانات علي الشاشة
غالبا الحلول تكمن في استخدام thread مثل Backgroundworker او شئ مماثل
اغلب Thread تعتمد علي تايمر و الفكرة التالية توضح كيف تملأ ListtBox بإستخدام تايمر بدلا من استخدام thread
دون أن يؤثر ذلك علي كفاءة البرنامج أو يؤدي الي تهنيج
لتنفيذ الفكرة
افتح مشروع ........
اضف للفورم ليست بوكس
أضف تايمر
واكتب الكود بالشكل التالي
PHP كود :
Public Class Form1
Private x As Integer = 0
Private values As String() = Nothing
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
values = New String() {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"}
Timer1.Start()
End Sub
Private Sub FillListBox()
Me.Timer1.Interval = 1000
Dim s As String = values(Me.x Mod values.Length)
x += 1
ListBox1.Items.Add(s)
If x = values.Length Then
Timer1.Stop()
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
FillListBox()
End Sub
End Class
المثال التالي يوضح كيف تقرأ البيانات و تملأ البيانات في نفس الوقت
الفكرة مثل Synchronize
لتنفيذ الفكرة
افتح مشروع
اضف عدد 2 تايمر
اضف ليست بوكس للفورم
واكتب الكود بالشكل التالي
أهم شئ في الموضوع أن التايمر الذي يقرأ يجب أن يكون أسرع من التايمر الذي يملأ الليست بوكس
PHP كود :
Public Class Form1
Private x As Integer = 0
Private y As Integer = 0
Private values As Integer() = Nothing
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
values = New Integer(1000) {}
Timer2.Start()
Threading.Thread.Sleep(100)
Timer1.Start()
End Sub
Private Sub FillListBox()
Me.Timer1.Interval = 1000
Dim s As Integer = values(Me.x Mod values.Length)
x += 1
ListBox1.Items.Add(s.ToString)
If x = values.Length Then
Timer1.Stop()
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
FillListBox()
End Sub
Private Sub ReadData()
values(y) = y
y += 1
If y = values.Length Then
Timer2.Stop()
End If
End Sub
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
ReadData()
End Sub
End Class
الفكرة يمكن تطويرها لقراءة بيانات من ملف ضخم
تقبلوا تحياتي
Retired