Autor Beitrag
inlove21
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 28.01.08 18:00 
Hallo!

Ich habe eben einige Assemblys in VB eingebunden und beim Aufruf einer Methode des Assemblies, die auf die Methode eines Interfaces in der VB-Klasse zugreift, ist folgender Fehler aufgetreten:

Ungültiger threadübergreifender Vorgang: Der Zugriff auf das
Steuerelement ProtokollBox erfolgte von einem anderen Thread als dem
Thread, für den es erstellt wurde.

Der Aufruf der Assembly Methode sieht so aus:
ausblenden Quelltext
1:
Subsembly.FinTS.Online.FinScriptSyncContact.Execute(Me, m_aBanking, m_aContact)					


Die Methode der Schnittstelle, die Probleme verursacht so:
ausblenden Quelltext
1:
2:
3:
Public Sub TraceAppendLine(ByVal sText As String) Implements Subsembly.FinTS.Online.IFinDocket.TraceAppendLine
        ProtokollBox.AppendText(sText & vbCrLf)
End Sub


Hat jemand eine Idee, woran das liegen könnte?
Das Assembly wurde mit C# erstellt.

Gruß,
Frank
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 28.01.08 18:03 
Hallo!

Auf Steuerelemente musst Du im Thread der GUI zugreifen. Schau Dir dazu mal die Doku zum Stichwort "Invoke" an. Solltest Du zum Beispiel in den Membern der Form-Klasse finden.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
inlove21 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 28.01.08 18:16 
Ich hab mir die Doku gerade durchgelesen, ist aber alles sehr abstrakt, hab ich nicht wirklich verstanden...

Das Problem ist wohl, dass ich aus meinem Formular eine Methode aufrufe, die ein C# Formular öffnet, das dann wiederum auf eine Methode meines VB-Formulars zugreifen will.
Könnte mir bitte jemand konkret sagen, an welcher Stelle ich da Invoke wie anwenden muss? Ich blick da grad net so ganz durch.

Der Quelltext oben steht im selben Formular. Der erst Teil ruft ein Formular auf, was in einem C# Assembly generiert wird. Dieses greift dann auf den zweiten Quelltext, der ebenfalls im VB-Formular steht, zu und dann knallts.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 28.01.08 18:40 
Also erst einmal: Dass die Sachen in verschiedenen Sprachen geschrieben wurde, hat nichts mit dem Problem zu tun. Du hast im Threadtitel schon richtig geschrieben: Das Problem ist der Zugriff aus einem anderen Thread heraus.

Invoke bekommt als Parameter einen Delegate, welcher dann im Thread der GUI ausgeführt wird, sodass der Zugriff also aus dem richtigen Thread erfolgt. In diesem Fall musst Du also den Zugriff auf ProtokollBox in eine Methode verpacken und diese als Delegate an Invoke übergeben.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
inlove21 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 29.01.08 13:36 
Das heißt, ich definiere mir eine Methode
ausblenden Quelltext
1:
2:
3:
Public Sub TextAnhaengen(ByVal sText As String)
     ProtokollBox.AppendText(sText)
End Sub


Und wie funktioniert das dann mit dem Invoke und dem Delegate?
Kannst du mir mal bitte den konkreten Quelltext posten? Danke!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 29.01.08 14:42 
Ich hab keine Ahnung, wie man Delegates in VB benutzt :nixweiss:

Aber ich bin eh der Meinung, dass ein bisschen Eigeninitiative Deinerseits angesagt wäre, so dürfte es im Netz vor Beispielen nur so wimmeln, denn die Benutzung von Invoke ist recht alltäglich.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".