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 ファイルを直接実行すると動作します (他のスレッドからは :( ではありません)。デバッグからリリースへのビルドと、F5 キーを使用して Visual Studio から開始すると、最初の呼び出しが再び機能します。
なぜそれが起こるのですか?
事前に助けてくれてありがとう!
よろしく、 ゾリ