コンテンツへスキップ

C#からOfficeをスレッド上で扱えない。

未解決事項です。C#上のスレッドでOfficeを扱えないみたいなんですよね。 エラーも出ずに応答なし状態。これは困った。

試した事としては、

// 当然、これはOK
this.Convert(tClient);

// ThreadPoolを使ってNG…Poolはダメなのかと思い
ThreadPool.QueueUserWorkItem(new WaitCallback(this.Convert), tClient);

// 単純Thread、NG
Thread tThread = new Thread(new ParameterizedThreadStart(this.Convert));
tThread.Start(tClient);

// MTA設定だからダメなのかと思い、STAにしたけどNG
Thread tThread = new Thread(new ParameterizedThreadStart(this.Convert));
tThread.SetApartmentState(ApartmentState.STA);
tThread.Start(tClient);

さて困った、泥臭いやり方をすればメインスレッドで変換処理を受け付ければよいので、対応可能なんだけど。。。いくらなんでもなぁ。。

まだ調査中です…、今からOfficeでのスレッドサポートを読んで来ます。

(追記) 同一スレッド上からなら扱えると思うので、メインスレッドではなく子スレッドでOfficeを起動すれば問題ないかも。ただし、スレッドで分けてやろうとすると、、個々のスレッドごとにOfficeを起動する必要ができてしまう。 また、Officeの起動自体にそれなりの負荷がかかってしまうため、固定スレッドで動作させる方がパフォーマンスとしてもよいと思う。結果、Queueを使ってOfficeThreadに依頼をする形がベストかなと。

© 2003 Kurusugawa Computer Inc.