Tipp-Upload: VB.NET 0434: Threadsafe Control
von Samael
Über den Tipp
Dieser Tippvorschlag wird übernommen.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Steuerelemente
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Thread,Control,Delegate
Der Vorschlag wurde erstellt am: 28.06.2012 14:02.
Die letzte Aktualisierung erfolgte am 28.06.2012 14:30.
Beschreibung
Dieser Tipp zeigt, wie man ohne Delegates auf Controls von einem anderen Thread aus zugreift.
Es wird ein neues Control erzeugt, welches von dem enstprechenden Control erbt. Hier wird die Text Property überschrieben und der Zugriff gesteuert.
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird. ' In den Zip-Dateien ist er jedoch zu finden. ' -------- Anfang Projektgruppe ThreadSafeControl.sln -------- ' ------------ Anfang Projektdatei Projekt.vbproj ------------ ' ------------------ Anfang Datei Form1.vb ------------------ Imports System.Threading Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click ' Zugriff aus selben Thread Me.ThreadSafeTextbox1.Text = "Hallo Activevb.de vom selben Thread" End Sub Private Sub AnotherThread() Me.ThreadSafeTextbox1.Text = "Hallo Activevb.de von einem anderen Thread" End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click ' Thread erzeugen Dim thread1 As New Thread(AddressOf AnotherThread) ' Thread starten thread1.Start() End Sub End Class ' ------------------- Ende Datei Form1.vb ------------------- ' ------------ Anfang Datei ThreadSafeTextbox.vb ------------ Public Class ThreadSafeTextbox Inherits TextBox ' Überschreiben der Basis-Eigenschaft Public Overrides Property Text As String Get Return MyBase.Text End Get Set(value As String) ' Abfragen, ob ein Invoken erforderlich ist If MyBase.InvokeRequired Then ' Den zu setzenden Text per Invoke übergeben MyBase.Invoke(Sub(s As String) MyBase.Text = s, New Object() {value}) ' Messagebox, um festzustellen, aus welchem Thread aus zugegriffen wurde ' Abfragen, ob man sich im Designmode befindet, obwohl zu Designtime wohl ' nie aus einem anderen Thread zugegriffen wird If Not DesignMode Then MessageBox.Show("Zugriff aus ANDEREM Thread") End If Else ' Den zu setztenden Text normal übergeben MyBase.Text = value ' Abfragen, ob man sich im Designmode befindet If Not DesignMode Then MessageBox.Show("Zugriff aus SELBEN Thread") End If End If End Set End Property End Class ' ------------- Ende Datei ThreadSafeTextbox.vb ------------- ' ------------- Ende Projektdatei Projekt.vbproj ------------- ' --------- Ende Projektgruppe ThreadSafeControl.sln ---------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.