Многопоточность в справке datagridview
Dim dtOr As New DataTable
Dim trdOr As Threading.Thread
Dim intMaxEtId As String
Delegate Sub LoadOrGrid()
Private Sub FillMyOrGrid() dgvCustOrders.DataSource = dtOr dgvCustOrders.Cursor = Cursors.Default End Sub
Public Sub GetMaxOrId() Dim SQLcon As New SqlConnection SQLcon = Database.DataModule.GetSQLConnection() Try Dim sql As String = ("WITH CTEQuery(OrderID) as (SELECT TOP 5 OrderID from Acc_orders where OrderTypeID=5 and ActionTypeID=0 and CompanyID=1 ORDER BY OrderID) select MAX(OrderID) as LaOrderId from CTEQuery") Dim da As SqlDataAdapter = New SqlDataAdapter(sql, SQLcon) Dim dtOrId As New DataTable da.Fill(dtOrId) intMaxOrId = dtOrId.Rows(0).Item(0).ToString Catch ex As Exception End Try End Sub
Public Sub UpdateOrInquiry() Dim SQLcon As New SqlConnection SQLcon = Database.DataModule.GetSQLConnection Try Dim SQL As String = String.Empty SQL = " update Acc_orders set ActionTypeID=1 where(OrderTypeID=5) and ActionTypeID=0 and CompanyID=1 and OrderID<=" & intMaxOrId SQLcon.Open() Dim command As New SqlCommand(SQL, SQLcon) command.ExecuteNonQuery() Catch ex As Exception 'frmMain.lblmessage.Text = (ex.Message) End Try SQLcon.Close() SQLcon.Dispose() End Sub
Public Sub GetOrSQLOrders() GetMaxOrId() If intMaxOrId Is Nothing OrElse IsDBNull(intMaxOrId) Then Exit Sub Else Dim SQLcon As New SqlConnection SQLcon = Database.DataModule.GetSQLConnection() Try Dim sql As String = "select top 5 OrderID,phone,Amount,CreateDate,CompanyID,(select UserName from Acc_Accounts where Acc_Accounts.AccountID = Acc_orders.AccountID) as UserName from Acc_orders where OrderTypeID=5 and ActionTypeID=0 and CompanyID=1 and OrderID<=" & intMaxOrId Dim daM As SqlDataAdapter = New SqlDataAdapter(sql, SQLcon) daM.Fill(dtOr) dgvCustOrders.DataSource = dtOr 'dgvCustOrders.Invoke(New LoadOrGrid(AddressOf FillMyOrGrid)) UpdateOrInquiry() Catch ex As Exception End Try End If End Sub
код работает нормально и стабильно если он находится в основном потоке но в многопоточности не стабилен
несколько раз он делает обновление для записи, прежде чем показать ее в datagrideview
и нестабильные вещи
Я вызываю код из таймера
Private Sub TBrain_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBrain.Tick Select Case cboNom.Text LoadData() StartMoSend() IfRecharge() End Sub
Private Sub LoadData() If lblMobRow.Text = 0 And txtMobiNorNumber.Text.Trim = "" Then GetOrSQLOrders() End If End Sub
спасибо за вашу помощь
Что я уже пробовал:
Я попробовал весь код apove, а затем заменил его.
dgvCustOrders.Invoke(New LoadOrGrid(AddressOf FillMyOrGrid))
с
dgvCustOrders.DataSource = dtOr
его работа и стабильность
0x01AA
> " Я вызываю код из таймера"
Таймер не означает " многопоточность"
GalaxyMan
это код загрузки данных для mutithred
Private Sub LoadData() If lblMobRow.Text = 0 And txtMobiNorNumber.Text.Trim = "" Then dgvCustOrders.Cursor = Cursors.WaitCursor trdOr = New Threading.Thread(AddressOf GetOrSQLOrders) trdOr.IsBackground = True trdOr.Start() End If End Sub