05-10-17, 12:11 AM
(04-10-17, 09:56 PM)Rabeea Qbaha كتب :(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 استخدم الكود الاتي لتشغيل البحث
كود :
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
شكرا على الرد
بس غريبه ان الكود ما اشتغل
عندما احط الكود في ال button بدون backgroundworker يكون شغال تمام
بس عندما احط الكود في ال backgroundworker لا يعمل
كذا الكود يكون شغال تمام
كود :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
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
End Subبس اذا حطيته في BackgroundWorker1_DoWork لا يعمل والا يطلع لي رساله غلط
كود :
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
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
Label14.Visible =False
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync
End Subشكرا

