سوال : مشکل در مقدار دهی background Worker به textbox در فرم

fotros67

کاربر تازه وارد
تازه وارد
#1
با سلام خدمت اساتید محترم
من یک برنامه نوشته ام که با استفاده از background worker و تایمر اطلاعات موجود در textbox های فرم را بروز رسانی می کنم.
وقتی تایمر اجرا می شود مقدار دهی ها صورت میگیرد اما مقادیر اشتباه وارد textbox ها می شود و در واقع مقادیر جا به جا هستند.
لطفا بنده را راهنمایی کنید
کد موجود در تابع elapse از تایمر اجرا شونده:

کد:
Protected Sub Timer_Elapsed(sender As Object, e As EventArgs) Handles Timer.Elapsed
 Dim Con As String = ""
        Dim Url As String = ""
        Dim counter As Integer
        Dim oop As New Functions
        Dim dt As DataTable = oop.RetrieveSites
                    counter = 1
            For i = 1 To 16 Step 8
                Dim bw1 As New BGWorkers
                Url = dt.Rows(counter - 1)(3).ToString
                Con = dt.Rows(counter - 1)(4).ToString
                Dim gp1 As GroupBox = DirectCast(Me.Controls.Find("GroupBox" + counter.ToString, False).FirstOrDefault(), GroupBox)
                Dim txt1 As TextBox = DirectCast(gp1.Controls.Find("TextBox" + i.ToString, False).FirstOrDefault(), TextBox)
                Dim txt2 As TextBox = DirectCast(gp1.Controls.Find("TextBox" + (i + 1).ToString, False).FirstOrDefault, TextBox)
                Dim txt3 As TextBox = DirectCast(gp1.Controls.Find("TextBox" + (i + 2).ToString, False).FirstOrDefault, TextBox)
                Dim txt4 As TextBox = DirectCast(gp1.Controls.Find("TextBox" + (i + 3).ToString, False).FirstOrDefault, TextBox)
                Dim txt5 As TextBox = DirectCast(gp1.Controls.Find("TextBox" + (i + 4).ToString, False).FirstOrDefault, TextBox)
                Dim txt6 As TextBox = DirectCast(gp1.Controls.Find("TextBox" + (i + 5).ToString, False).FirstOrDefault, TextBox)
                Dim txt7 As TextBox = DirectCast(gp1.Controls.Find("TextBox" + (i + 6).ToString, False).FirstOrDefault, TextBox)
                Dim txt8 As TextBox = DirectCast(gp1.Controls.Find("TextBox" + (i + 7).ToString, False).FirstOrDefault, TextBox)
                bw1.Main(txt1, txt2, txt3, txt4, txt5, txt6, txt7, txt8, Con, Url)
                counter += 1
            Next
End Sub
 

fotros67

کاربر تازه وارد
تازه وارد
#2
پاسخ : مشکل در مقدار دهی background Worker به textbox در فرم

دوستان خودم جواب را پیدا کردم.
مشکل در نداشتن تاخیر (delay) بود که باید در حلقه یک تاخیر 1 تا 2 ثانیه ای قرار دهیم.


کد:
 For i = 1 To (ToolStripDropDownButton1.DropDownItems.Count * 8) Step 8
                Dim bw1 As New BGWorkers
                Url = dt.Rows(counter - 1)(3).ToString
                Con = dt.Rows(counter - 1)(4).ToString
                Dim GB1 As GroupBox = DirectCast(Me.Controls.Find("GroupBox" + counter.ToString, False).FirstOrDefault(), GroupBox)
                Dim txt1 As TextBox = DirectCast(GB1.Controls.Find("TextBox" + i.ToString, False).FirstOrDefault(), TextBox)
                Dim txt2 As TextBox = DirectCast(GB1.Controls.Find("TextBox" + (i + 1).ToString, False).FirstOrDefault, TextBox)
                Dim txt3 As TextBox = DirectCast(GB1.Controls.Find("TextBox" + (i + 2).ToString, False).FirstOrDefault, TextBox)
                Dim txt4 As TextBox = DirectCast(GB1.Controls.Find("TextBox" + (i + 3).ToString, False).FirstOrDefault, TextBox)
                Dim txt5 As TextBox = DirectCast(GB1.Controls.Find("TextBox" + (i + 4).ToString, False).FirstOrDefault, TextBox)
                Dim txt6 As TextBox = DirectCast(GB1.Controls.Find("TextBox" + (i + 5).ToString, False).FirstOrDefault, TextBox)
                Dim txt7 As TextBox = DirectCast(GB1.Controls.Find("TextBox" + (i + 6).ToString, False).FirstOrDefault, TextBox)
                Dim txt8 As TextBox = DirectCast(GB1.Controls.Find("TextBox" + (i + 7).ToString, False).FirstOrDefault, TextBox)
                bw1.Main(txt1, txt2, txt3, txt4, txt5, txt6, txt7, txt8, Con, Url)
                counter += 1
                Threading.Thread.Sleep(1000)
            Next
 
بالا