Ich habe eine externe Komponente (C++), die ich von meinem C# -Code aufrufen möchte.C# STAThread COMException
Der Code ist so etwas wie diese:
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace dgTEST
{
class Program
{
[STAThread]
static void Main(string[] args)
{
ExtComponentCaller extCompCaller = new ExtComponentCaller();
result = extCompCaller.Call(input);
Thread t = new Thread(new ThreadStart(() =>
{
try
{
result = extCompCaller.Call(input);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}));
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
}
}
}
Das Problem ist also, dass beim ersten Aufruf, es funktioniert gut, die externe Komponente genannt, bekam ich Ergebnis zurück. Wenn ich versuche, es in einem anderen Thread aufzurufen, habe ich eine Ausnahme: System.InvalidCastException: Kann COM-Objekt vom Typ "System. Ich bin sicher, dass diese Ausnahme wegen des STAThread geworfen wurde. Weil, wenn ich das [STAThread] -Attribut von der Hauptfunktion entferne, dasselbe mit dem ersten Anruf der externen Komponente geschieht, der gut gearbeitet wurde.
Wie kann ich diese externe Komponente von einem anderen Thread aufrufen, um diese Ausnahme loszuwerden?
UPDATE -------------
Andere verrückte Sache kommt jetzt. Wenn ich das Programm von Visual Studio mit F5 starte, tritt das Problem auch beim ersten Aufruf auf, aber wenn ich direkt die binäre .exe-Datei ausführe, funktioniert es (vom anderen Thread ist es nicht :(). Wenn ich schalten Sie den Build von Debug auf Release und es von Visual Studio mit F5, der erste Anruf wieder zu arbeiten beginnen.
Warum ist es passiert?
Dank im Voraus für Sie helfen!
mit besten Grüßen, Zoli
Was passiert, wenn Sie die gesamte Arbeit (COM-Instanz erstellen und Methode ausführen) in einem Thread erstellen, den Sie als STA markieren?Es ist möglich, dass dieses COM-Objekt als STA in der Registrierung markiert ist und nicht gut über verschiedene COM-Appliances funktioniert (von MTA zu STA oder von STA zu MTA), möglicherweise aufgrund eines Fehlers in der Art, wie es codiert wurde. –
Ich habe die gleiche Ausnahme :(. Aber die Hauptfunktion ist STA, wo der Thread erstellt wird. Der Thread auf STA auch eingestellt, so verstehe ich nicht. –
Dies kann aufgrund eines Fehlers in der Komponente. Wann alles wird in einem einzigen STA-Thread erledigt, es sollte funktionieren –