- - PR -
Excelの終了を待つには
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-03-28 14:55
C#.NETで開発を行っております。
Excelを起動し既存フォームを表示して操作しています。 フォームが閉じられるまで待って、 その後にガベージを開放するようにしたいのですが、 どのようにすれば良いでしょうか? 下記の "★★★終了するまで待つ★★★" の箇所についてお教え下さい。 Excel.Application oXL = null; Excel._Workbook oWB = null; // エクセルのオブジェクト配列 … 開放する際に使用する。 Object [] oExcelObjects = { oXL, oWB, }; oXL = new Excel.Application(); // フォーム(ワークブック)を開く oWB = (Excel._Workbook)(oXL.Workbooks.Open( _strWorkForm, Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing,Type.Missing,Type.Missing,Type.Missing)); (ここで起動したフォームに対しての処理をする) //---------------------- // エクセルの終了を待つ //---------------------- (★★★終了するまで待つ★★★) //----------------------------------- // エクセルのオブジェクトを開放する。 //----------------------------------- for ( i = 0 ; i < oExcelObjects.Length ; i++ ) { oExcelObjects[ i ] = null; } GC.Collect(); |
|
投稿日時: 2005-03-28 15:11
こんにちは、じゃんぬ です。
これでしたら、COM を使うのではなく、 Process クラスを使った方が楽でしょうね。 プロセスを起動して終了するまで待機する _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2005-03-28 15:58
ご返答頂きましたプロセス起動に関しましては、確かに簡単で確実にガベージの問題も解決できると思っています。
以前は、エクセルフォーム側にVBAでロジックを持たせ、VBAでフォームの操作をするようにしていましたので、プロセス起動で終了の同期を取るようにしていました。 C#→COM→EXCELでは、遅くなってしまいますが、 直接アプリケーションから、いろいろな操作ができますし、 また、イベントも取れますので、あえて、COM経由で行っています。 起動したエクセルについては、インスタンスを保持していますので、 なんとか、イベント/プロパティ/COMの参照件数 等で、 終了同期を取りたいと考えています。 調べましたところ、フォームを閉じるボタンでのイベントはあるのですが、 EXCELが終了したタイミングで発生するイベントについては、 見つけることができませんでした。 C#→COM→EXCELで、終了同期を取る方法はないものでしょうか? |
1