我有一个外部组件 (C++),我想从我的 C# 代码中调用它。
代码是这样的:
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();
}
}
}
所以问题是,在第一次调用时它运行良好,调用了外部组件,我得到了结果。
但是当我尝试在另一个线程中调用它时,我遇到了一个异常: System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' ... 。由于 STAThread,我确定抛出了这个异常。因为如果我从 Main 函数中删除 [STAThread] 属性,外部组件的第一次调用也会发生同样的情况,它工作正常。
如何从其他线程调用此外部组件以消除此异常?
更新 - - - - - - -
现在发生了其他疯狂的事情。当我使用 F5 从 Visual Studio 启动程序时,问题也出现在第一次调用中,但是当我直接执行二进制 .exe 文件时,它正在工作(从另一个线程它不是:()。如果我切换从 Debug 到 Release 的构建并使用 F5 从 Visual Studio 启动它,第一个调用再次工作。
为什么会这样?
提前感谢您的帮助!
最好的问候,佐利