0

この問題は、Project2010と2013の両方で再現しました。

Visual Studio 2010を使用してVSTOアドインを開発しました。このアドインでは、COMVisibleメソッドを公開しました。

また、別の(.NET以外の)アプリケーションがあり、Project COMオブジェクトをインスタンス化し、アドインを検索して、COMVisibleとしてマークしたメソッドを呼び出します。

これにより、Projectは「新しい」Projectファイルを開き、それに何かを書き込みます。

この非.NETアプリケーションは、アドインでCOMメソッドを呼び出した後、(MS Projectを閉じずに)実行を停止します。

次に、新しく作成したプロジェクトを閉じます(MS Projectではなく、ファイルのみ)。すべて順調; ただし、MS Projectを閉じようとすると、無期限にハングします。タスクマネージャでは、引き続き「実行中」と表示され、MS Projectウィンドウをクリックすると、「切り替え」、「再試行」、「キャンセル」ダイアログが表示され、他のアプリケーションがビジーであることを通知します...

驚いたことに、新しく作成したProjectファイルを閉じずに、MS Projectウィンドウを閉じるだけで、通常どおりに閉じます。

ここで何が起こっているのでしょうか?

4

1 に答える 1

0

よく調べてみたところ、問題の答えが見つかりました。基本的に、VSTOアドインから公開されたCOMクラスは、「StandardOleMarshalObject」を継承する必要があります。

これは、アドインのCOMメソッドがセカンダリスレッド(呼び出し元のアプリケーションのスレッド)でプロジェクトオブジェクトモデルにアクセスしていたためです。これは大したことではありません。そのクラスから派生すると、そのセカンダリスレッドのすべての呼び出しがプライマリUIスレッドにマーシャルされ、問題が修正されます。

于 2013-01-24T07:57:06.650 に答える