Hallo,
ich befasse mich erst seit kurzem mit C# sowie WPF und möchte damit eine GUI bauen welche unter C++ aufgerufen und beidseitig kommunizieren soll.
Die C#-GUI existiert als dll und wird in C++ mittels #import des Interfaces sowie durch nutzung von COM aufgerufen. Das Interface erlaubt dabei die Kommunikation von C++ nach C#, nun möchte ich aber auch auf das Klicken auf einen Button auf der C#-WPF-GUI in C++ reagieren können. Daher habe ich das Observer-pattern genutzt, wobei die C++ Seite der Listener ist und C# auf das entsprechende Button-Click Event reagiert, indem die Listener informiert werden.
Klicke ich nun auf den Button der WPF-GUI wird die GUI gefreezed und auf C++ Seite kommt keine Information über das entsprechende Event an. Erst wenn ich das window der GUI schliesse(Closed-Event) und dadurch der Dispatcher herunterfährt, wird das Event nach C++ weitergereicht.
Rufe ich während dessen weitere Dispatcher-Aktionen auf C++ Seite auf, bekomme ich eine exception: "System.InvalidOperationException: Collection was modified; enumeration operation may not execute."
Erzeuge ich das Event "künstlich", ohne Buttonklick, läuft alles problemlos.
Auch wenn ich statt mit einer C++ mit einer anderen C#-Klasse kommuniziere läuft alles problemlos (auch mit ButtonKlick auf der GUI).
Ich hab schon gelesen das nur ein einziger Thread für die Aktualisierung der GUI zuständig ist und daher mittels BackgroungWorker und zusätzlichen Threads versucht das Problem zu lösen, aber das führt zu keiner Veränderung.
Hat jemand eine Idee wie ich dieses Problem lösen könnte, bzw. eine Idee für eine alternative Kommunikation zu C++?
Besten Dank im voraus
Frank