vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

VB.NET - Ein- und Umsteiger
Re: Winsock programmierung - Thread erforderlich 
Autor: Manfred X
Datum: 09.05.11 09:30

Hallo!

Ich durchschaue nicht so ganz, was in welchem Deiner Threads
erledigt wird. Steuerelemente befinden sich im GUI-Thread und
sind gewöhnlich nicht direkt von anderen Threads zugänglich.

Wenn Du mit der Verwendung von "Invoke" nicht so bewandert bist,
vielleicht hilft Dir eine kleine WrapperKlasse, die diesen Job
erledigt.
Public Class cTextAppend
 
    ' Verweis auf die Textbox
    Private _TextBox As Windows.Forms.TextBox
 
    ' Speichert den hinzuzufügenden Text.
    Private _NewText As String
 
    'Konstruktor: Verweis auf die Textbox   
    Public Sub New(ByVal TheTextbox As TextBox)
        Me._TextBox = TheTextbox
    End Sub
 
    'Anhängen von Text an die Textbox   
    Public Sub AppendText(ByVal newText As String)
       SyncLock Me
         Me._NewText = newText
         _TextBox.Invoke _
         (New MethodInvoker(AddressOf ThreadSafeAddText))
       End SyncLock
    End Sub
 
    Private Sub ThreadSafeAddText()
        _TextBox.AppendText(_NewText)
    End Sub
 
    'Löschen des Textes in der Textbox
    Public Sub Clear()
       SyncLock Me
         _TextBox.Invoke _
         (New MethodInvoker(AddressOf ThreadSafeClearText))
      End SyncLock
    End Sub
 
    Private Sub ThreadSafeClearText()
        _TextBox.Clear()
    End Sub
End Class
Anwendungsbeispiel (bei einem Click auf Start wird ein
Thread gestartet, der Zahlen in die Textbox einträgt.
 
Public Class frmThreadDemo
 
    Dim tb As New TextBox _
    With {.Parent = Me, .Top = 10, .Left = 10, _
      .Width = 200, .Height = 200, .Multiline = True}
 
    Dim WithEvents btnStart As New Button _
    With {.Parent = Me, .Top = 10, .Left = 220, .Text = "Start"}
 
    Dim TextBoxAppend As cTextAppend
 
    Private Sub Load(sender As System.Object, _
            e As System.EventArgs) Handles MyBase.Load
        'Instanz des Wrapper zum Füllen der Textbox
        TextBoxAppend = New cTextAppend(tb)
    End Sub
 
    Private Sub Count()
      'Die Methode, die in einem eigenen Thread ausgeführt
      'wird und per Wrapper die Textbox füllt
      Static counter As Long = 0
      If counter >= 300 Then
         counter = 0
         'Methode der Wrapperklasse aufrufen
         TextBoxAppend.Clear()
      End If
 
      For i As Integer = 0 To 100
         counter += 1
         'Methode der Wrapperklasse aufrufen
         TextBoxAppend.AppendText(CStr(counter) & vbCrLf)
      Next i
    End Sub
 
    Private Sub btnStart_Click(sender As Object, _
        e As System.EventArgs) Handles btnStart.Click
        Dim CountThread As New Threading.Thread(AddressOf Count)
        CountThread.Start()
    End Sub
End Class


Beitrag wurde zuletzt am 09.05.11 um 09:31:00 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Winsock programmierung - Thread erforderlich1.353supernicky08.05.11 22:03
Re: Winsock programmierung - Thread erforderlich1.058Manfred X09.05.11 09:30
Re: Winsock programmierung - Thread erforderlich802supernicky09.05.11 15:02
Re: Winsock programmierung - Thread erforderlich886Manfred X09.05.11 16:07
Re: Winsock programmierung - Thread erforderlich844supernicky09.05.11 16:36
Re: Winsock programmierung - Thread erforderlich890supernicky10.05.11 22:57

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-2025 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