Warum wird ein Aufruf an nicht verwalteten Code von einem Thread .NET Background die Benutzeroberfläche beeinflussen?

StackOverflow https://stackoverflow.com/questions/283241

  •  08-07-2019
  •  | 
  •  

Frage

Ich habe eine lange laufende Serie von Operationen in einem .NET 2.0 BackgroundWorker Thread. Wenn ich einen Anruf auf nicht verwalteten Code machen in einer referenzierten Assembly befindet sich die UI ist gesperrt, bis der Anruf beendet ist.

Warum ist das? Sollte ich nicht aus dem BackgroundWorker Faden machen diese Anrufe werden?


Ja, es ist eine COM-Komponente, aber ich bin nicht sicher, wie zu sagen, ob es STA ist oder nicht, und was die Auswirkungen / Auflösung ist / sind. Ich mache mehrere Anrufe auf diese Komponente, aber es ist nur die lang andauernde diejenigen, bei denen ich die Benutzeroberfläche nicht mehr reagiert bemerken.

Diese Anrufe Abrufen von Daten von einem Server.

War es hilfreich?

Lösung

Sie haben die COM-Tag in der Frage bekam - werden Sie in eine COM-Komponente aufrufen? Ist es eine STA-Komponente? Wenn ja, kann es gut sein Rangier zurück irgendwie seine Arbeit auf dem UI-Thread zu tun. Ich werde leicht zugeben, ich bin ein langer Weg von einem Experten auf COM Sachen, aber ich wäre nicht überrascht, wenn das das Problem ist.

Was passiert, wenn Sie die Anrufe von einem neuen Thread zu machen, die Sie explizit erstellt haben?

Andere Tipps

Ja und auch, hat das mit allen nicht verwalteten Code passieren oder nur eine bestimmte Komponente oder API? Wenn eine spezifische, was ist das nicht verwalteten Code zu tun?

Auch könnten Sie einfach kommentieren Sie Ihren aktuellen Code in der Background (Sie laufen RunWorkerAsync rechts ...) und einen Schlaf versetzt drin. Wenn Ihr GUI reagiert etwas wird ist nicht richtig, sonst ist es der Code, den Sie fordern, als Jon weist darauf hin, könnte der Fall mit COM sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top