岡三RSSのExcelをC#から操作する際の 0x80010001 (RPC_E_CALL_REJECTED) のエラー対策

id:unibon:20090608:p2 の続き。
Excel を COM として C# から操作する。そしてその Excel は株価の変化や注文状況の変化で起こるイベントで、勝手に VBA のイベントが起こって内部で動いている。そこへ、C# などで外部から操作されると競合が起きる。その際に、外部からの操作に対しては 0x80010001 (RPC_E_CALL_REJECTED) の例外が起こるのだろう。この例外が起きても、メソッド呼び出しをリトライすれば、基本的に大丈夫なようだ。しかしかったるい。try/catch をすべてのメソッド呼び出しに1個ずつ書かないといけない。まとめて catch しても良いが、そうしたらどのメソッド呼び出しからリトライしないといけないかを考えないといけないので逆に面倒になる。
したがって、根本的に解決するにはそもそも 0x80010001 (RPC_E_CALL_REJECTED) を起こさないようにすることが必要だ。


要は、内部で動いている時に、同時に外部から呼ばないようにすれば良い。
(続く)