Excel レポートの生成に役立つライブラリを VB.NET で作成しています。
私は .NET/VS2010 を初めて使用するので、何か間違ったことをしようとしている場合は申し訳ありません。
必要な機能の 1 つは、何らかの作業 (Access データ ソースからワークブックを更新する) を行うためにスレッドを開始するルーチンです。メイン スレッドは、更新が失敗した結果として Excel ウィンドウにダイアログがポップアップするかどうかをチェックします。
私が抱えている問題は、新しいスレッドが Excel.Application オブジェクトを参照できないことです。エラーは発生せず、フリーズするだけです。
これが私の状況のデモです:
Imports System.Threading
Imports System.Diagnostics
Imports System.Runtime.InteropServices
Imports Microsoft.Office.Interop
Public Class xlTest
Public xlApp As Excel.Application
Sub DoBackgroundStuff()
MsgBox ("DoBackgroundStuff() says: " & xlApp.Version)
End Sub
Sub New()
xlApp = New Excel.Application
MsgBox ("New() says: " & xlApp.Version)
Dim t As New System.Threading.Thread(AddressOf DoBackgroundStuff)
t.Start()
Do While t.IsAlive
System.Threading.Thread.Sleep (100)
Loop
xlApp.Quit()
End Sub
End Class
DoBackgroundStuff プロシージャは、XlApp の任意の部分を参照しようとすると、例外をスローせずにフリーズします。DoBackgroundStuff 内にブレークポイントを追加して XlApp を監視しようとすると、そのすべてのプロパティが「式を評価できません」と表示されます。
-クラスの他のメンバーは、スレッドで問題なく読み取ることができます。
- プロセス ID から Excel.Application オブジェクトを取得することで回避策を試しましたが (問題なく動作します)、このメソッドは MainWindowHandle を使用しているため、Excel ウィンドウが表示されていない場合は失敗し、回避策を使用できません。
私が間違っていることを指摘してください。
どうもありがとう!