Measurement Studio .NET コントロール に、別のスレッドからアクセスすると例外が発生します。マルチスレッドの .NET プログラムでコントロールにアクセスしようとすると、なぜこの例外が出るのですか。 使用ソフトウェア: Measurement Studio>>.NET Support使用ソフトウェア・バージョン: N/A 使用ソフトウェア・バージョンに特化: N/A 二次のソフトウェア: Measurement Studio>>Visual Basic Support
問題: 複数のスレッドから Measurement Studio .NET コントロールにアクセスしようとすると、プログラムがしばらくアイドルし、終了した直後に "Object does not match a target type" 例外が出ます。原因は何ですか。また修正する方法はありますか。 解決策: 基本的に Measurement Studio .NET コントロールをインスタンス化したスレッド以外から、コントロールのメソッド呼び出しはできません。ただし、 BeginInvoke、 EndInvoke、 Invoke、 InvokeRequired、CreateGraphics メソッドは呼び出せます。これら5つのメソッド以外を呼び出すには、コントロールやフォームの ISynchronizeInovke 経由で呼び出します。Invoke か BeginInvoke を使うのがよい方法です。たとえば ThreadPool コールバック・メソッドでは、Measurement Studio .NET コントロールに直接アクセスしない限り、任意のコードを渡せます。 Threadpool で Measurement Studio .NET コントロールにアクセスするには、フォームの Invoke メソッドから、任意のメソッドを呼び出します。以下に示す例では、MyRealThreadCallback メソッドが、Measurement Studio .NET コントロールに直接アクセスしています。MyRealThreadCallback メソッドは、MyThreadCallback メソッドの中で、Invoke メソッドから呼び出されます。MethodInvoker は void 引数を取り、void を返すメソッドのデリゲートです。MethodInvoker デリゲートの詳細は、下記のマイクロソフトへのリンクをご参照ください。
does not access a Measurement Studio .NET control directly. Visual C# のマルチスレッド・プログラミングにおいて、Measurement Studio .NET コントロールや CWUI コントロールへアクセスする例は、下記の NI Developer Zone (英語)をご参照ください。 このルールは、ActiveX を含む Windows のフォームコントロールにのみ適用されます。.NET アプリケーションで ActiveX コントロールを使う場合、実際には AxHost を継承したラッパーを呼び出しています。ラッパーは Windows のフォームなので、このルールが適用されます。別のスレッドから Invoke メソッドを使用して、別のメソッドを呼び出すと、コントロールを生成したメソッドから呼び出すようになります。
関連リンク: Microsoft .NET Class Framework Library MethodInvoker (英語) Developer Zone Example: Accessing a Measurement Studio ActiveX Control and a Native .NET Control in a Multithreaded Program in Visual C#(英語) 添付:
報告日時: 12/19/2002 最終更新日: 10/29/2007 ドキュメントID: 2SID3ESJ |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
