2009-06-10 4 views
1

Wir haben einen C# -Code, der COM (den Calling Legacy Code) verwendet.Warum funktionieren COM-Ereignisse nicht mehr, wenn Unit-Tests mit Microsoft Visual Studio 2008 verwendet werden?

Wenn ein Ereignis eintritt, wird ein COM-Ereignis ausgelöst.

Alles funktioniert perfekt.

Wenn wir jedoch denselben Code innerhalb eines Komponententests aufrufen, hören die COM-Ereignisse plötzlich auf - es ist nur Stille, wie eine Art leerer Raum ohne Partei.

Irgendwelche Ideen warum?

Umwelt:

  • Microsoft Visual Studio 2008.
  • Unit-Tests für MSVS 2008 errichtet in der Unit-Tests unter Verwendung von

Antwort

2

Ohne weitere Details, das ist schwer zu diagnostizieren. Es ist jedoch möglich, dass dies tatsächlich ein Apartment-Problem ist: IIRC, VS führt Tests in einer STA durch. Wenn Ihre Anwendung einen MTA verwendet, um denselben Code auszuführen, kann es sein, dass Sie mit einem Deadlock oder ähnlichen Problemen konfrontiert werden.

0

Nun, wir konnten es nicht beheben, also haben wir es geschafft, indem wir auf eine Version der API umgestiegen sind, die Sockets anstelle von COM verwendet. Alles funktioniert jetzt perfekt.

Ich bin zu 90% sicher, dass die COM-API, die wir verwenden, auf MTA (Multi Threaded Apartment) statt auf STA (Single Threaded Apartment) basiert. Von dem, was ich über COM weiß, vermischen sich MTA und STA nicht im selben Raum.

Ich stimme für Ihre Antwort, denn das ist die einzige Erklärung, die mir die vollständige Abwesenheit von COM-Ereignissen während eines Komponententests erklären könnte.

Verwandte Themen