04-10-17, 09:56 PM
(04-10-17, 04:33 PM)dubai.eig كتب : السلام عليكم ورحمة الله
اسفسر عن الطريقه الصحيحه في التعامل مع ل BackgroundWorker او Threading
عندي كود شغال تمام بس المشكله عند عمل الكود يبحث في قاعدة البيانات واذا القاعدة كبيره يعلق البرنامج ويتاخر
بعد اذنكم محتاج الطريقه لصحيحه للتعامل مع الكود بدون ما يحصل هناك اي تعليق اي توقف
الكود هذا هو
كود :
Dim con As New SQLiteConnection(String.Format("Data Source= {0}\DB" & DBT & ".s3db", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)))
Dim com As String = String.Format("Select PFX From DB Where PFX='{0}' and Ba = '" & ban.Text & "'", Trim(PFX.Text))
Dim ds = New DataSet
Dim da = New SQLiteDataAdapter(com, con)
da.fill(ds)
If (ds.Tables(0).Rows.Count > 0) Then
Multi.Text = PFX.Text
Else
Multi.Text = PFX.Text
Multi.BackColor = SystemColors.Info
End If
If contestnx = "All Asian" And Continentx = "AS" and WORK.Text = "AS" And ban.Text = "160M" Then
Points.Text = "3"
ElseIf contestnx = "All Asiant" And Continentx = "AS" and WORK.Text = "AS" And ban.Text = "80M" Or ban.Text = "10M" Then
Points.Text = "2"
ElseIf contestnx = "All Asiant" And Continentx = "AS" and WORK.Text = "NA" Or WORK.Text = "SA" Or WORK.Text = "EU" Or WORK.Text = "OC" And ban.Text = "160M" Then
Points.Text = "9"
ElseIf contestnx = "All Asiant" And Continentx = "AS" and WORK.Text = "NA" Or WORK.Text = "SA" Or WORK.Text = "EU" Or WORK.Text = "OC" And ban.Text = "80M" Or ban.Text = "10M" Then
Points.Text = "6"
ElseIf contestnx = "All Asiant" And Continentx = "AS" and WORK.Text = "NA" Or WORK.Text = "SA" Or WORK.Text = "EU" Or WORK.Text = "OC" And ban.Text = "40M" or ban.Text = "20M" Or ban.Text = "15M" Then
Points.Text = "3"
ElseIf contestnx = "All Asiant" And Continentx = "NA" Or Continentx = "SA" Or Continentx = "EU" Or Continentx = "OC" And WORK.Text = "SA" Or WORK.Text = "EU" Or WORK.Text = "OC" Or WORK.Text = "NA" Then
Points.Text = "0"
ElseIf contestnx = "All Asiant" And WORKinfo.PFX.Text = PFXX Then
Points.Text = "0"
End If
بارك الله فيكم وجزاكم الف خير
قم باضافه backgroundworker الى المشروع
كود :
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim con As New SQLiteConnection(String.Format("Data Source= {0}\DB" & DBT & ".s3db", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)))
Dim com As String = String.Format("Select PFX From DB Where PFX='{0}' and Ba = '" & ban.Text & "'", Trim(PFX.Text))
Dim ds = New DataSet
Dim da = New SQLiteDataAdapter(com, con)
da.fill(ds)
If (ds.Tables(0).Rows.Count > 0) Then
Multi.Text = PFX.Text
Else
Multi.Text = PFX.Text
Multi.BackColor = SystemColors.Info
End If
If contestnx = "All Asian" And Continentx = "AS" And WORK.Text = "AS" And ban.Text = "160M" Then
Points.Text = "3"
ElseIf contestnx = "All Asiant" And Continentx = "AS" And WORK.Text = "AS" And ban.Text = "80M" Or ban.Text = "10M" Then
Points.Text = "2"
ElseIf contestnx = "All Asiant" And Continentx = "AS" And WORK.Text = "NA" Or WORK.Text = "SA" Or WORK.Text = "EU" Or WORK.Text = "OC" And ban.Text = "160M" Then
Points.Text = "9"
ElseIf contestnx = "All Asiant" And Continentx = "AS" And WORK.Text = "NA" Or WORK.Text = "SA" Or WORK.Text = "EU" Or WORK.Text = "OC" And ban.Text = "80M" Or ban.Text = "10M" Then
Points.Text = "6"
ElseIf contestnx = "All Asiant" And Continentx = "AS" And WORK.Text = "NA" Or WORK.Text = "SA" Or WORK.Text = "EU" Or WORK.Text = "OC" And ban.Text = "40M" Or ban.Text = "20M" Or ban.Text = "15M" Then
Points.Text = "3"
ElseIf contestnx = "All Asiant" And Continentx = "NA" Or Continentx = "SA" Or Continentx = "EU" Or Continentx = "OC" And WORK.Text = "SA" Or WORK.Text = "EU" Or WORK.Text = "OC" Or WORK.Text = "NA" Then
Points.Text = "0"
ElseIf contestnx = "All Asiant" And WORKinfo.PFX.Text = PFXX Then
Points.Text = "0"
End Subو في كود ال button استخدم الكود الاتي لتشغيل البحث
تستطيع ايضا وضع صوره GIF تدل على ان عمليه البحث جاريه
اة مجرد كتابه عن طريق label
اذا اردت فعل ذلك قم بعرض الصوره او النص عند بدء العمليه
و قم بأخفاءها عند انتهاء عمل البحث في backgroundworker في الكود الاتي :
كود :
BackgroundWorker1.RunWorkerAsyncتستطيع ايضا وضع صوره GIF تدل على ان عمليه البحث جاريه
اة مجرد كتابه عن طريق label
اذا اردت فعل ذلك قم بعرض الصوره او النص عند بدء العمليه
و قم بأخفاءها عند انتهاء عمل البحث في backgroundworker في الكود الاتي :
كود :
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
label1.Visible =False
End Sub