2017-04-05 4 views
-2

Ich verwende eine API für eine Kamera, die das Bild über Callback zurückgibt, wie folgt aus:Rückruf in einem anderen Thread

camera.StartCapture(ImageEvent); 

protected void ImageEvent(ManagedImage image) 
{ 
    // do something with the image 
} 

Das Problem ist, dass ImageEvent hält genannt wird, nicht im Stich gelassen anderen Methoden ordnungsgemäß ausgeführt . Also ich möchte ImageEvent in einem anderen Thread ausführen, wie mache ich das?

Eine Lösung mit async/await wäre vorzuziehen.

+1

Sie könnten 'StartCapture' in einem anderen Thread ausführen. Ist dieses 'ManagedImage' in irgendeiner Weise mit der Benutzeroberfläche verbunden? Wenn dies der Fall ist, erhalten Sie einige Multithread-Zugriffsprobleme. – Stefan

+0

@Stefan, also, wenn ich den Delegaten von einem neuen Thread übergeben, wird die delegierte Methode in diesem neuen Thread ausgeführt? Außerdem ist es nicht mit der Benutzeroberfläche verwandt. –

+0

Kannst du erklären, dass "andere Methoden nicht korrekt ausgeführt werden können", ein bisschen mehr ausgeben? Wenn Sie die Bilder nicht anzeigen, verarbeiten Sie sie und schreiben sie auf die Festplatte? Hast du die Aktivität deiner Festplatte überprüft? – Stefan

Antwort

1
camera.StartCapture(image => Task.Run(() => ImageEvent(image))); 
+0

Aber ImageEvent würde immer noch im Hauptthread laufen. Ich möchte vermeiden, dass es überhaupt im Hauptthread aufgerufen wird. –

+0

@GabrielJ sicher, legen Sie es außerhalb ImageEvent, lassen Sie mich bearbeiten – MistyK

+0

Es erweist sich als ein wenig komplizierter als das, weil "Kamera" ist von dynamischer Art. Aber ich werde sowieso nicht Multithreading verwenden. Danke und Entschuldigung für die Verschwendung Ihrer Zeit –

Verwandte Themen