Ich habe eine C++ - Anwendung (Funktionen eines SDK für eine bestimmte Hardwarekomponente aufrufen), und möchte seine Daten in einer C# -GUI anzeigen. Der C# -Teil ist eine DLL, die C++ aufruft. (Dies ist auf Anfrage vom Kunden, so habe ich nicht viel Auswahl.)C++ - Code die GUI in C# DLL aktualisieren
Ich bin nicht sehr gut in C#, also möglicherweise etwas offensichtliche fehlen, aber ich habe Probleme mit beiden angezeigt die GUI und aktualisieren sie.
ich Zugriff auf den C# -Code mit this method, mit dem Code in etwa wie folgt aus (ptr
ist eine Klassenvariable):
// Initialize COM.
CoInitialize(NULL);
ptr = new IPtr(__uuidof(ManagedClass));
(*ptr)->ShowForm();
dann in einem anderen Thread:
if (updating) (*ptr)->Update(data)
Auf der C# Seite haben wir :
FormClass myForm;
void ShowForm()
{
myForm = new FormClass();
Application.Run(myForm);
}
void Update(Data data)
{
myForm.Update(data)
}
Wenn ich Application.Run oder ShowDialog zu s verwende Wie meine GUI aussieht, zeigt das Formular schön an, aber das Update bringt die Anwendung zum Absturz. Mit Show ist die GUI nicht mehr erreichbar. Die Verwendung von BeginInvoke führte dazu, dass die GUI nie erschien.
Gibt es eine empfohlene Möglichkeit für mich, die GUI bei dieser Einrichtung zu starten? Wäre es hilfreich, Invoke/BackgroundWorker in Update zu verwenden, anstatt die myForm-Methode direkt aufzurufen?