vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 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 - Fortgeschrittene
Methodenaufruf von WPF Control aus anderem Thread 
Autor: LuckyGeorge
Datum: 24.04.08 11:14

Guten Tag erstmal.

Sorry, wenn ich gleich so reinplatze aber ich habe aktuell ein Problem, daß mich seit gestern umtreibt, und finde einfach keine Lösung.

Folgendes Szenario:

1. Es existiert eine Windows Form (frmGISView), die über einen ElementHost ein WPF Control (mapView) darstellt. Dieses WPF Control zeigt eine 3D Landschaft an und das ganze funktioniert einwandfrei.

2. Es existiert aus Kompatibilitätsgründen eine zweite Windows Form (frmMain) welche nur ein Textfeld enthält auf das sich Threads via SyncLock synchronisieren. Die frmMain wird in der frmGISView erstellt.

2. Es existiert ein externes Modul zu Netzwerkkommunikation. Dieses Modul hat 2 Funktionen (Connect und RecieveMessage). Die Connect Function wird aus der frmGISView gestartet und verbindet sich mit einem Server. In der RecieveMessage Funktion werden die empfangenen Meldungen ausgewertet. Das funktioniert auch.

Nun zu meinem Problem:

Innerhalb der RecieveMessage Funktion (welche ja dem Netzwerkthread gehört) möchte ich eine Funktion des WPF Controls - ich nenne sie mal zeigePunkt(ByVal pos as Point) aufrufen. Das klappt natürlich so nicht und wirft eine Exception mit dem Text "The calling Thread must be STA ...". Also dachte ich, ich bin schlau und baue einfach in das Netzwerkmodul einen STA Thread ein, der aus der RecieveMessage Funktion gestartet wird:

Public Sub Recieve_Message(ByVal MessageString as String) Handles _
  MeldungRecieved
 
'... hier Messagebehandung
 
if MessageString = "Zeige Punkt" then
zeigePunktStart(position)
end if
 
'... hier Messagebehandung
 
End Sub
 
Public Sub zeigePunktStart(ByVal pos as Point)
Dim t as Thread = new Thread(new ParameterizedThreadStart(AddressOf _
  zeigePunktWork)
t.SetApartmentState(ApartmentState.STA)
t.Start(CObj(pos)
End sub
 
PrivateSub zeigePunktWork(ByVal obj as Object)
Try
My.Forms.frmGISViewer.mapView.zeigePunkt(CType(obj, Point))
catch ex as exception
End Try
Leider war das garnicht so schlau, denn der so erzeugte Thread greift nicht, wie ich hoffte, auf mein Objekt zu sondern beginnt immer neue Instanzen von frmGISViewer zu erstellen.
Mir ist auch klar, daß ich den Aufruf in zeigePunktWork so nicht machen sollte sondern über den Dispatcher des mapView Objects einen Threadsicheren Aufruf starten sollte - nur bis dahin komme ich ja nicht, da mir immer ein neues Objekt erzeugt wird. Weiss da jemand Rat?
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Methodenaufruf von WPF Control aus anderem Thread2.523LuckyGeorge24.04.08 11:14
Re: Methodenaufruf von WPF Control aus anderem Thread1.727Melkor24.04.08 11:30
Re: Methodenaufruf von WPF Control aus anderem Thread1.625LuckyGeorge24.04.08 11:51
Re: Methodenaufruf von WPF Control aus anderem Thread1.650Melkor24.04.08 11:55
Re: Methodenaufruf von WPF Control aus anderem Thread1.510LuckyGeorge24.04.08 12:22

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