VB.NET Thread und GUI


Peter Parker

Mitglied
Hallo @ all,

ich habe in VB.NET 2005 folgendes Problem. Ich starte meine GUI und öffne ein Formular.auf diesem Fprmular kann ich auf verschiedene Registerkarten navigieren. Unterhalb der Registerkarten befindet sich ein Button mit dem ich eine Funkion aufrufe.
Da diese Funktions sehr zeitintensiv ist habe ich diese in einen Thread gepack, um weiterhin in meinem Formular auf den Registerkarten navigieren zu können.
Irgendwie klappt das aber nicht, wenn ich die Funktion starte friert mir mein Formular ein und ich muss auf das ende der Funktion warten.

Jemand eine Ahnung wie ich das Problem beheben kann?

Hier der Quellcode:


Imports System.Threading
Imports System.Xml.XmlWriter
Imports System.Windows.Forms.DataGrid
Imports Communication 'ActiveX VB6 Komponente
Imports System.Data

Public Class oba_025

Dim thStrAbf As New Thread(AddressOf starteAbfrage)

'Button Start aufruf
Private Sub buttAuswstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttAuswstart.Click
'Threads starten
thStrAbf.Start() 'RPC starten
End Sub

'Serverfunktion aufrufen und Auswahl auswerten
Private Sub starteAbfrage()
Dim srv As New InterfaceClass
Dim timestamp As String

timestamp = " " 'String*15

Try
srv.init() 'Startwerte setzen
srv.launch_oba025as(timestamp)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub

End Class
 

Peter Parker

Mitglied
Hallo habe die Lösung gefunden!

Code:
Imports System.Threading
Imports System.Xml.XmlWriter
Imports System.Windows.Forms.DataGrid
Imports Communication                            'ActiveX VB6 Komponente
Imports System.Data

Public Class oba_025

    Dim thStrAbf As New Thread(AddressOf starteAbfrage)

    'Button Start aufruf
    Private Sub buttAuswstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttAuswstart.Click
        'Threads starten
        thStrAbf.Start()                        'RPC starten
    End Sub

    'Serverfunktion aufrufen und Auswahl auswerten
    Private Sub starteAbfrage()
        Dim srv As New InterfaceClass war falsch richtig ist: Dim srv As New 
        Dim timestamp As String

        timestamp = "               "           'String*15

        Try
            srv.init()                           'Startwerte setzen
            srv.launch_oba025as(timestamp)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

End Class