mastermindzh
Verenigingslid
- Lid geworden
- 10 dec 2008
- Berichten
- 4.993
voor probleem 2 maak ik een andere vraag.
Probleem 2:
Omdat het ophalen van gegevens uit een database nogal lang kan duren (veel gegevens), wil ik dit proces multithreading meegeven.
Dat doe ik nu op de volgende manier
[CPP] Dim tryquerythread = New System.Threading.Thread(AddressOf tryquery)
Public Sub tryquery()
Try
loading.Visible = True
Dim adapter As New MySqlDataAdapter()
adapter.SelectCommand = New MySqlCommand(query, myconn)
Dim mydatatable As New DataTable
adapter.Fill(mydatatable)
DataGridView1.DataSource = mydatatable
DataGridView1.ScrollBars = ScrollBars.Both
txtQuery.Text = query
loading.Visible = False
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
[/CPP]
vervolgens roep ik dit op deze manier aan:
[CPP]
query = "Select * from werkuren"
Try
tryquerythread.isbackground = True
tryquerythread.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
[/CPP]
Ook heb ik dit geprobeert:
[CPP]
query = "Select * from werkuren"
Try
tryquerythread = New System.Threading.Thread(AddressOf tryquery)
tryquerythread.isbackground = True
tryquerythread.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
[/CPP]
en ook deze variant heb ik geprobeert:
[CPP] query = "Select * from werkuren"
Private Sub ToolStripMenuItem130_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem130.Click
query = "Select * from werkuren"
Try
tryquerythread.cancel()
Catch ex As Exception
End Try
Try
tryquerythread = New System.Threading.Thread(AddressOf tryquery)
tryquerythread.isbackground = True
tryquerythread.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
[/CPP]
Alle 3 de varianten lijken hetzelfde resultaat te geven, namelijk het volgende:
1ste keer drukken op de knop: query voert uit (alles gaat goed op scrollbars na, zie probleem 1)
2de keer drukken op de knop: query voert uit (alles gaat goed op scrollbars na, zie probleem 1)
3de keer drukken op de knop: NullreferenceException was unhandled
Soms triggert het ook bij de 2de keer en soms bij de 8ste etc... (ik heb het idee dat ik dan te snel weer het knopje indruk, en dus zal moeten controleren of de thread bezig is)
Kan iemand hier mee helpen?
[edit]
ook een isnot nothing wrap helpt niet
[cpp] If tryquerythread IsNot Nothing Then[/cpp]
[/edit]
Probleem 2:
HTML:
extra info:
"query" is een dim die bovenaan de app staat, deze wordt ALTIJD eerst ingevuld voordat de thread start.
control.checkforillegalcrossthreadcals staat op true
system.threading is geimporteerd
loading is een picturebox met een foto zodat gebruikers weten dat het programma bezig is
Omdat het ophalen van gegevens uit een database nogal lang kan duren (veel gegevens), wil ik dit proces multithreading meegeven.
Dat doe ik nu op de volgende manier
[CPP] Dim tryquerythread = New System.Threading.Thread(AddressOf tryquery)
Public Sub tryquery()
Try
loading.Visible = True
Dim adapter As New MySqlDataAdapter()
adapter.SelectCommand = New MySqlCommand(query, myconn)
Dim mydatatable As New DataTable
adapter.Fill(mydatatable)
DataGridView1.DataSource = mydatatable
DataGridView1.ScrollBars = ScrollBars.Both
txtQuery.Text = query
loading.Visible = False
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
[/CPP]
vervolgens roep ik dit op deze manier aan:
[CPP]
query = "Select * from werkuren"
Try
tryquerythread.isbackground = True
tryquerythread.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
[/CPP]
Ook heb ik dit geprobeert:
[CPP]
query = "Select * from werkuren"
Try
tryquerythread = New System.Threading.Thread(AddressOf tryquery)
tryquerythread.isbackground = True
tryquerythread.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
[/CPP]
en ook deze variant heb ik geprobeert:
[CPP] query = "Select * from werkuren"
Private Sub ToolStripMenuItem130_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem130.Click
query = "Select * from werkuren"
Try
tryquerythread.cancel()
Catch ex As Exception
End Try
Try
tryquerythread = New System.Threading.Thread(AddressOf tryquery)
tryquerythread.isbackground = True
tryquerythread.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
[/CPP]
Alle 3 de varianten lijken hetzelfde resultaat te geven, namelijk het volgende:
1ste keer drukken op de knop: query voert uit (alles gaat goed op scrollbars na, zie probleem 1)
2de keer drukken op de knop: query voert uit (alles gaat goed op scrollbars na, zie probleem 1)
3de keer drukken op de knop: NullreferenceException was unhandled
Soms triggert het ook bij de 2de keer en soms bij de 8ste etc... (ik heb het idee dat ik dan te snel weer het knopje indruk, en dus zal moeten controleren of de thread bezig is)
Kan iemand hier mee helpen?
[edit]
ook een isnot nothing wrap helpt niet
[cpp] If tryquerythread IsNot Nothing Then[/cpp]
[/edit]
Laatst bewerkt: