vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Funktion in einem Thread ausführen 
Autor: Testuser16
Datum: 10.09.08 12:22

Ich würde gerne eine recht rechenintensive Funktion in einen Thread packen, damit die GUI nicht abschmiert, wenn ich in ein anderes Programm gehe und danach wieder zu meinem Programm zurückkehre. Ich habe mir mal was ganz einfaches zusammengebastelt, aber leider läuft es nicht. Sobald man auf den Button klickt, soll ein Thread erstellt werden und der Text in der Rich Text Box erscheinen. Sobald ich einen Haken in die Checkbox setze, soll der Thread dann gestoppt werden. Das Beispiel habe ich hier aus der FAQ abgeleitet und ich habe auch den Beitrag von Snoopy gelesen und versucht es hier nachzubauen:

Imports System.Threading
 
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        test()
    End Sub
 
    Shared Sub Zählen()
        Dim i As Integer
        Dim strText As String = ""
 
        Try
            Do While True
                strText += "Hallo Welt zum " & i & "-ten Mal" & vbCrLf
                Form1.RichTextBox1.Text = strText
                Form1.RichTextBox1.Refresh()
                i += 1
            Loop
        Catch ex As ThreadAbortException
            ' hier Aufräumarbeiten einfügen
            Return
        End Try
    End Sub
 
    Shared Sub test()
        Dim t As New Threading.Thread(AddressOf Zählen)
 
        t.Start()
        'irgendwelche Aufgaben, die den Thread beenden wollen
        If Form1.ckbTest.Checked = True Then
            t.Abort()
        End If
        ' wenn man jetzt den Thread wieder starten möchte, wird eine Exception 
        ' ausgelöst
    End Sub
 
End Class
Kann mir jemand einen Tipp dazu geben?

Danke für Eure Hilfe!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Funktion in einem Thread ausführen 
Autor: ModeratorRalf Ehlert (Moderator)
Datum: 10.09.08 16:24

Ich würde dir den BackgroundWorker empfehlen. Ist sehr einfach in der Bedienung. Gibt dazu auch zwei Workshops - einfach mal in der Workshopsuche nach BackgroundWorker suchen. Kann man nicht verfehlen

Ansonsten Forum auch durchsuchen. Ist aber wirklich sehr einfach zu verwenden.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Funktion in einem Thread ausführen 
Autor: Testuser16
Datum: 10.09.08 16:46

Danke für den Hinweis. Habe auch meinen Fehler gefunden. Ich kann ja nicht einfach die Formulardaten ansprechen, sondern muss dies über Delegate und die Invoke Funktion lösen.

Hier etwas, das geklappt hat:

Imports System.Threading
 
Public Class Form1
 
    Dim strText As String
    Dim t As New Threading.Thread(AddressOf Zählen)
    Dim UpdateSteuerelement As New MethodInvoker(AddressOf UpdateLabel) ' 
    ' Delegate
 
    Private Sub UpdateLabel()
        RichTextBox1.Text = strText
        RichTextBox1.Refresh()
    End Sub
 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        test()
    End Sub
 
    Sub Zählen()
 
        Try
            For j As Integer = 1 To 20
                strText += "Dies ist der " & j & "-Text Durchlauf" & vbCrLf
                Me.Invoke(UpdateSteuerelement)
                j += 1
                Thread.Sleep(1000)
            Next
        Catch ex As ThreadInterruptedException
            ' hier Aufräumarbeiten einfügen
            strText += "Thread wurde unterbrochen" & vbCrLf
            Me.Invoke(UpdateSteuerelement)
            Return
        End Try
    End Sub
 
    Private Sub test()
        t.Start()
        'irgendwelche Aufgaben, die den Thread beenden wollen
 
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button2.Click
        t.Interrupt()
    End Sub
End Class
Danke für die Hilfe!!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel