我正在用VB.NET编写一个有助于生成Excel报告的库
我是.NET / VS2010的新手,很抱歉,如果我想做错事
我需要的一个功能是启动一个线程来执行某些工作(从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窗口不可见,它将失败,这使得我的解决方法无法使用。 />
请指出我做错了什么。
非常感谢!