|
| |

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. |  |
 | 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 |
  |
|
Neu! sevCommand 4.0 
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
| |
|
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
|
|