ich eine C# .NET-Anwendung zu schreiben, die eine C++ DLL aufruft. Diese DLL ist ein Gerätetreiber für ein Abbildungssystem; Wenn das Bild aufgenommen wird, ist eine Vorschau des Bildes zeilenweise aus der Bibliothek verfügbar. Die C++ - DLL nimmt einen Rückruf, um die Vorschau auszufüllen, und dieser Rückruf besteht im Wesentlichen aus der Größe des endgültigen Bildes, der aktuell gescannten Zeile und der Datenzeile selbst.C# app C++ dll zurück in die C# app über Rückrufe
Problem ist, gibt es aus der Zeit eine ziemlich ernste Verzögerung ist, wenn stoppt das Scannen und der C# Rückruf nicht mehr Informationen zu bekommen. Der Ablauf des Programms geht in etwa so:
- zuordnen Rückruf C++ DLL aus C#
- Benutzer beginnen, Daten zu erhalten
- Gerät startet
- dll startet den Rückruf nach wenigen Sekunden anrufen (normal)
- Gerät beendet Bildbildung
- dll ruft immer noch den Rückruf für die doppelte Zeit der Bilderzeugung.
Das gleiche DLL arbeitete mit einer C++ - Anwendung ganz gut; es scheint nicht die letzte Schrittverzögerung zu sein. In C# jedoch, wenn ich den Rückruf sofort zurückgeben, ist die Verzögerung noch vorhanden; egal, was ich im Callback mache, es ist da.
Ist diese Verzögerung eine inhärente Begrenzung der verwalteten Code von nicht verwalteten Code aufrufen, oder gibt es etwas zu beiden Seiten tun könnte dies schneller gehen zu machen? Ich bin in Kontakt mit der C++ - Bibliothek Writer, so ist es möglich, eine Fehlerbehebung von der C++ Seite zu implementieren.
Edit: Könnte etwas so einfach wie eine Named Pipe Arbeit tun? Kann eine Anwendung von ihrer eigenen Pipe lesen?
So klingt es wie der Rückruf viele Male pro Bild aufgerufen wird? Wie viele? Vielleicht können Sie diese Aufrufe in einem einzigen Callback Batch, indem die C++ DLL die Daten zwischenspeichern? –
Maybe-- wie in der C++ - DLL deklariert den Puffer, übergibt den Zeiger an die C# -App, und dann die App regelmäßig aus dem Puffer verbraucht? – mmr