تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة break state
#1
الكود التالي استخدمه لعمل تحديث لكامل قاعدة البيانات والتي تتضمن 3000 سجل

كود :
'  تصفير الاسعار والكميات
   Public Sub Reset()
       For i As Integer = 0 To DGridItems.Rows.Count - 1
           Dim dt As New DataTable
           Dim Adapter As New SqlDataAdapter
           dt.Clear()
           Adapter = New SqlDataAdapter("select * from Items where ItemID = " & DGridItems(0, i).Value & "", sqlcon)
           Adapter.Fill(dt) '  
           Dim c As Boolean
           c = DGridItems.Rows(i).Cells(8).Value
           If c = True Then
               If dt.Rows.Count > 0 Then
                   dt.Rows(0).Item("ItemLargePrice") = 0
                   dt.Rows(0).Item("ItemLargeBuyPrice") = 0
                   dt.Rows(0).Item("ItemQtyLarge") = 0
                   dt.Rows(0).Item("ItemQtyMeduim") = 0
                   dt.Rows(0).Item("ItemMeduimPrice") = 0
                   dt.Rows(0).Item("ItemMeduimBuyPrice") = 0
                   Dim save As New SqlCommandBuilder(Adapter)
                   Adapter.Update(dt)
                   dt.AcceptChanges()
               End If

           End If
       Next

   End Sub


لكن المشكلة لا يتم التنفيذ وتظهر المشكلة التي في الصورة ادناه


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#2
قم بإجراء العملية في Thread مختلف عن الـ Thread الخاص بواجهة البرنامج :
بما أنك في هذا الإجراء لا تتعامل مع أي كنترول في واجهة البرنامج, من الآمن عمل هذا الإحراء في Thread مختلف.
في أثناء عمل الإجراء لن تتجمد واجهة البرنامج ويمكنك عمل أي شيء في البرنامج بينما الـ Thread يقوم بالعمل في الخلفية.

إذا كنت تستخدم 4.0 NET Framework.  وأعلى أنصحك بإستخدام Task بدلاً من الـ Thread 
   

بإستخدام الـ Thread 
كود :
Public Sub Reset()
   Dim ResetThread As New Threading.Thread(Sub()
                                               For i As Integer = 0 To DGridItems.Rows.Count - 1
                                                   Dim dt As New DataTable
                                                   Dim Adapter As New SqlDataAdapter
                                                   dt.Clear()
                                                   Adapter = New SqlDataAdapter("select * from Items where ItemID = " & DGridItems(0, i).Value & "", sqlcon)
                                                   Adapter.Fill(dt) '  
                                                   Dim c As Boolean
                                                   c = DGridItems.Rows(i).Cells(8).Value
                                                   If c = True Then
                                                       If dt.Rows.Count > 0 Then
                                                           dt.Rows(0).Item("ItemLargePrice") = 0
                                                           dt.Rows(0).Item("ItemLargeBuyPrice") = 0
                                                           dt.Rows(0).Item("ItemQtyLarge") = 0
                                                           dt.Rows(0).Item("ItemQtyMeduim") = 0
                                                           dt.Rows(0).Item("ItemMeduimPrice") = 0
                                                           dt.Rows(0).Item("ItemMeduimBuyPrice") = 0
                                                           Dim save As New SqlCommandBuilder(Adapter)
                                                           Adapter.Update(dt)
                                                           dt.AcceptChanges()
                                                       End If

                                                   End If
                                               Next
                                           End Sub)

   ResetThread.Start()
End Sub
بإستخدام الـ Task
كود :
   Public Sub Reset()
       Dim ResetTask As New System.Threading.Tasks.Task(Sub()
                                                            For i As Integer = 0 To DGridItems.Rows.Count - 1
                                                                Dim dt As New DataTable
                                                                Dim Adapter As New SqlDataAdapter
                                                                dt.Clear()
                                                                Adapter = New SqlDataAdapter("select * from Items where ItemID = " & DGridItems(0, i).Value & "", sqlcon)
                                                                Adapter.Fill(dt) '  
                                                                Dim c As Boolean
                                                                c = DGridItems.Rows(i).Cells(8).Value
                                                                If c = True Then
                                                                    If dt.Rows.Count > 0 Then
                                                                        dt.Rows(0).Item("ItemLargePrice") = 0
                                                                        dt.Rows(0).Item("ItemLargeBuyPrice") = 0
                                                                        dt.Rows(0).Item("ItemQtyLarge") = 0
                                                                        dt.Rows(0).Item("ItemQtyMeduim") = 0
                                                                        dt.Rows(0).Item("ItemMeduimPrice") = 0
                                                                        dt.Rows(0).Item("ItemMeduimBuyPrice") = 0
                                                                        Dim save As New SqlCommandBuilder(Adapter)
                                                                        Adapter.Update(dt)
                                                                        dt.AcceptChanges()
                                                                    End If

                                                                End If
                                                            Next
                                                            MsgBox("تم الإنتهاء من العمل")
                                                        End Sub)

       ResetTask.Start()
   End Sub
الرد }}}
تم الشكر بواسطة: mohamedassim



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم