Hallo DaveS,
danke für die prompte Antwort. Ich habe das jetzt auch versucht zu realisieren, indem ich nicht mehr
TreeView1.Nodes.Add(MyNode) aufrufe, sondern
Me.Invoke(New addNodeFromThreadDelegate(AddressOf addNodeFromThread), New _
Object() {MyNode}) mit folgender Funktion:
Private Delegate Sub addNodeFromThreadDelegate(ByVal node As TreeNode)
Private Sub addNodeFromThread(ByVal node As TreeNode)
TreeView1.Nodes.Add(node)
End Sub Das funktioniert auch, allerdings brauch ich jetzt noch einen zweiten Parameter für die Funktion, nämlich die TreeNodeCollection, zu der der Knoten hinzugefügt werden soll. Also habe ich das folgendermaßen geändert:
Private Delegate Sub addNodeFromThreadDelegate(ByVal nodecoll As _
TreeNodeCollection, _
ByVal node As TreeNode)
Private Sub addNodeFromThread(ByVal nodecoll As TreeNodeCollection, _
ByVal node As TreeNode)
nodecoll.Add(node)
End Sub Allerdings scheitere ich am Aufruf, den ich so realisieren wollte:
Me.Invoke(New addNodeFromThreadDelegate(AddressOf addNodeFromThread), _
New Object() {NodeCollection}, New Object() {MyNode}) Dann spuckt mir der Compiler aber folgenden Fehler aus:
Zitat: |  |
Die Überlandungsauflösung ist fehlgeschlagen,da keine zugreifbare "Invoke" diese Anzahl von Argumenten akzeptiert.
|  |
Ich vermute es liegt an einem fehlerhaften Verständnis der Invoke-Methode meinerseits, deshalb meine Fragen:
1. Ein Delegate ist ein Zeiger der auf eine Funktion zeigt?
2. Mit dem Delagate erreiche ich, dass die Add-Methode der TreeNodeCollection aus dem Hauptthread aufgerufen wird?
3. Ich kann der Invoke-Methode keine typisierten Variablen übergeben, sondern muss diese in den Object-Typ umwandeln?
4. Wird mit New Object() {MyNode} ein Objekttyp mit dem Inhalt von MyNode erstellt?
Für die Beantwortung dieser Fragen wäre ich sehr dankbar.
Danke im Voraus,
Stefan
Web: http://www.vbtricks.de.vu/
VBTricks.de.vu. Meine Webseite zu VB und anderen Programmiersprachen. Verschiedene fortgeschrittene OCXe und komplette Projekte sind im Sourcecode verf?gbar. |