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

fotros67

کاربر تازه وارد
تازه وارد
با سلام خدمت اساتید محترم
من یک برنامه نوشته ام که با استفاده از 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

کاربر تازه وارد
تازه وارد
پاسخ : مشکل در مقدار دهی 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
 
بالا