C# kodumdan aramak istediğim bir dış bileşen (C++) var.C# STAThread COMException
kodu şöyle bir şeydir: Yani sorun ilk başta iyi çalışıyor diyoruz, yani
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();
}
}
}
denilen dış bileşen, ben sonuca döndüm.
Ancak, başka bir iş parçacığında aramayı denediğimde, bir özel durum var: System.InvalidCastException: 'System .__ ComObject' türünde COM nesnesine dönüştürülemiyor .... Bu istisnanın, STAThread nedeniyle attığından eminim. Çünkü [STAThread] özniteliğini Ana işlevden kaldırırsam, aynı durum, dış bileşenlerin ilk çağrısıyla oluşur ve bu da iyi çalıştı.
Bu özel durumdan kurtulmak için bu dış bileşeni başka bir iş parçacığından nasıl arayabilirim?
GÜNCELLEME -------------
Diğer çılgın şey şimdi ortaya çıkar. F5 ile Visual Studio'dan programı başlattığınızda, ilk çağrıda da sorun oluşur, ancak ikili .exe dosyasını doğrudan çalıştırdığımda, (diğer iş parçacığı değil :() çalışıyor. I bırakın ve F5 ile Visual Studio onu başlayarak ilk çağrı tekrar çalışmaya Debug yapı geçin.
Neden olur?
Teşekkür önceden yardım için!
Saygılarımızla, Zoli
STA olarak işaretlediğiniz bir iş parçasında tüm işi yaptığınızda (COM örneği oluştur ve yöntem çalıştır) ne olur?Bu COM nesnesinin kayıt defterinde STA olarak işaretlenmiş olması olasıdır ve farklı COM apartmanlarında (MTA'dan STA'ya veya STA'dan MTA'ya), kodlama biçimindeki bir hatadan dolayı iyi çalışmadığı anlaşılmaktadır. –
Aynı özel durumu aldım :(. Ancak Ana işlev, iş parçacığının oluşturulduğu STA'dır. İş parçacığı STA'ya da ayarlanmış, bu yüzden anlamıyorum. –
Bu, bileşendeki bir hatadan kaynaklanabilir. her şey tek bir STA iş parçacığında yapılır, çalışmalıdır –