1


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 ウィンドウが表示されていない場合は失敗し、回避策を使用できません。

私が間違っていることを指摘してください。
どうもありがとう!

4

0 に答える 0