Toon posts:

[VB.NET]DataSet uit thread op Datagrid

Pagina: 1
Acties:

Verwijderd

Topicstarter
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Private WithEvents myGrid As New AccountGrid()
Private AccountGridThread As New Thread(AddressOf myGrid.FillDataSet)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AccountGridThread.Start()
        StatusBar1.Text = "Loading accounts..."
End Sub

Private Sub SquareEventHandler(ByVal DS As DataSet) Handles myGrid.ThreadComplete
        DataGrid1.SetDataBinding(DS, "Accounts")
        StatusBar1.Text = "Done loading accounts"
End Sub


Bij

Visual Basic:
1
DataGrid1.SetDataBinding(DS, "Accounts")


krijg ik:

An unhandled exception of type 'System.ArgumentException' occurred in system.windows.forms.dll

Additional information: Controls created on one thread cannot be parented to a control on a different thread.

Hou kan ik die DataSet die ik terug krijg toch gebruiken op mijn datagrid?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Waar is je DataSet (DS) gedeclareerd?

Maak er eens een field-variable van binnen je form class.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Trouwens, waarom laad je je dataset in in een aparte thread?

Gaat het uitvoeren van die query dan zo traag? Misschien kan je eerst eens kijken om je query te versnellen. Doe eens een 'explain' van je query path, kijk of de indexen die je op de tabellen liggen hebt gebruikt worden, indien dit niet zo is, zorg ervoor dat de indexen gebruikt worden, (als je indexen hebt natuurlijk; heb je die niet, creeër er dan).

https://fgheysels.github.io/


Verwijderd

Topicstarter
Je bedoelt waar die vandaan komt? andere klasse

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Public Class AccountGrid
    Private _DataSet As New Dataset()
    Private Const ConnStr As String = "---l"

    Public Event ThreadComplete(ByVal DataSet As DataSet)

    ReadOnly Property Dataset() As Dataset
        Get
            Return _DataSet
        End Get
    End Property

    Public Sub FillDataSet()
        Dim myConnection As SqlConnection = New SqlConnection(ConnStr)
        Try
            Dim myAdapter As New SqlDataAdapter("tsp_get_Accounts", myConnection)
            myConnection.Open()
            myAdapter.Fill(_DataSet, "Accounts")
            myConnection.Close()
        Catch ex As Exception
            RecordError.Record(ex)
        End Try
        RaiseEvent ThreadComplete(_DataSet)
    End Sub
End Class

Verwijderd

Topicstarter
whoami schreef op 12 March 2003 @ 16:46:
Trouwens, waarom laad je je dataset in in een aparte thread?

Gaat het uitvoeren van die query dan zo traag? Misschien kan je eerst eens kijken om je query te versnellen. Doe eens een 'explain' van je query path, kijk of de indexen die je op de tabellen liggen hebt gebruikt worden, indien dit niet zo is, zorg ervoor dat de indexen gebruikt worden, (als je indexen hebt natuurlijk; heb je die niet, creeër er dan).
Nu laad ik heb bij form_load.. maar wil hem om de zoveel tijd refreshen zonder dat je GUI bevriest... daarnaast gebruik ik dit om threading onder de knie te krijgen voordat ik meer met threading gaan doen....(emails naar database importeren, maar dat komt allemaal later)

dus daarom is het niet belangrijk voor mij hoe lang de stored procedure er over doet... wil dit per se via een thread doen... probleem is voor mij dus ook niet wat ik doe.. (datagrid vullen..) maar hoe ik het doe (een thread op starten die een dataset terug geeft die ik wil binden aan datagrid op het form)

Verwijderd

Topicstarter
Ok ik moet Invoke() gebruiken heb ik net gehoord, maar ik weet niet hoe ik dit moet implementeren. Ik heb wel wat voorbeelden in c# gevonden, maar het gebruik van invoke() daar is zo taalspecifiek dat ik het niet kan omcijferen naar vb.net
Pagina: 1