0

WordをPDFに変換するスレッドを使用してC#アプリケーションを開発しました。
このアプリケーションは、Office2007を搭載したWinXPで正常に動作します。ただし、Office 2010を搭載したWin7で使用すると、エラーが発生します。

次のエラーが原因で、IClassFactoryからCLSID {00020906-0000-0000-C000-000000000046}を使用してCOMコンポーネントのインスタンスを作成できませんでした:8001010a。

Win7にアプリケーションを実行させる方法を教えてください。

4

1 に答える 1

3

エラー コード 0x8001010a は RPC_E_SERVERCALL_RETRYLATER、「呼び出されたオブジェクトは現在呼び出しを処理しないことを選択しました。後でもう一度試してください。」Office アプリでは珍しくありません。しばらく寝てからやり直してください。

これは、可能な限り控えめな表現を使用するため、あまり実用的ではありません。最終的には、コードでスレッドを使用していることが原因です。Office オブジェクトはシングルスレッドです。確かにワーカー スレッドでメソッド呼び出しを行うことができますが、COM はオブジェクトを作成した STA スレッドへの呼び出しを自動的にマーシャリングします。マルチスレッドのすべての利点を本質的に取り除きます。それを避けるために独自の STA スレッドを作成すると、Office アプリ内でマーシャリングが行われます。

呼び出しを行ったときにアプリがメソッドを実行する準備ができていない場合は、他の何かを実行するのに忙しいため (通常は、以前に実行するように要求したもので)、これで呼び出しを拒否します。エラーコード。エラーが発生する正確な時期は非常に予測不可能であり、バージョンの変更は確かに異なる動作の資格があります。コードを激しく叩くのを避けるために、コードのスレッドをトーンダウンする必要があります。

または、IMessageFilter インターフェイスを実装し、プログラムが呼び出しでハングしても問題ないことを COM に伝え、Office アプリが呼び出しを処理する準備ができるまで待機し続ける必要があります。 この Q+Aはそれについて語っています。

于 2012-09-11T11:20:30.973 に答える