Hi!
Ich beschäftige mich im Moment etwas mit Multithreading und mir ist eine Sache aufgefallen: Wenn ich zwei SQL-Abfragen gleichzeitig laufen lasse, werden sie zwar auch gleichzeitig abgearbeitet, allerdings beim DataGrid füllen wartet ein Thread immer bis ein Grid gefüllt ist und dann macht der andere Thread mit dem Füllen des zweiten DataGrid weiter. Ist es möglich es so zu machen, dass der eine Grid auf einem Prozessor läuft und der andere auf dem zweiten. Eigentlich müsste das doch das BS übernehmen oder? Warum werden dann beim debuggen die Grids nacheinander gefüllt?
Hier der ungefähre Code:
Ich beschäftige mich im Moment etwas mit Multithreading und mir ist eine Sache aufgefallen: Wenn ich zwei SQL-Abfragen gleichzeitig laufen lasse, werden sie zwar auch gleichzeitig abgearbeitet, allerdings beim DataGrid füllen wartet ein Thread immer bis ein Grid gefüllt ist und dann macht der andere Thread mit dem Füllen des zweiten DataGrid weiter. Ist es möglich es so zu machen, dass der eine Grid auf einem Prozessor läuft und der andere auf dem zweiten. Eigentlich müsste das doch das BS übernehmen oder? Warum werden dann beim debuggen die Grids nacheinander gefüllt?
Hier der ungefähre Code:
Code:
'Global
Dim MethodInvokerGrid1 As New MethodInvoker(AddressOf Me.DataBindToDataGrid)
Dim MethodInvokerGrid2 As New MethodInvoker(AddressOf Me.DataBindToDataGrid2)
'Prozedur, die beide Threads startet
Private Sub MultiThreadHoff()
'Grid1 Thread
Dim aDBThread As Thread
aDBThread = New Thread(New ThreadStart(AddressOf QueryDataBaseHoff))
aDBThread.IsBackground = True
aDBThread.Name = "DBThread"
aDBThread.Start()
'Grid2 Thread
Dim aDBThread2 As Thread
aDBThread2 = New Thread(New ThreadStart(AddressOf QueryDataBaseHoff2))
aDBThread2.IsBackground = True
aDBThread2.Name = "DBThread2"
aDBThread2.Start()
End Sub
'Füllen des Datasets für den Grid1
Public Sub QueryDataBaseHoff()
aDS = New DataSet
Dim cmd As New OdbcCommand(sSQLHoff, aConHoff)
aAdpHoff = New OdbcDataAdapter(cmd)
aAdpHoff.Fill(aDS, sTblName)
' Asynchroner Aufruf
Me.BeginInvoke(MethodInvokerGrid1)
End Sub
'Füllen des Datasets für den Grid2
Public Sub QueryDataBaseHoff2()
aDS2 = New DataSet
Dim cmd As New OdbcCommand(sSQLHoff2, aConHoff2)
aAdpHoff2 = New OdbcDataAdapter(cmd)
aAdpHoff2.Fill(aDS2, sTblName)
' Asynchroner Aufruf
Me.BeginInvoke(MethodInvokerGrid2)
End Sub
'Grid1 füllen
Public Sub DataBindToDataGrid()
DataGrid1.DataSource = aDS
DataGrid1.DataMember = sTblName
aAdpHoff = Nothing
aDS = Nothing
End Sub
'Grid2 füllen
Public Sub DataBindToDataGrid2()
DataGrid2.DataSource = aDS2
DataGrid2.DataMember = sTblName
aAdpHoff2 = Nothing
aDS2 = Nothing
End Sub