我有一个Excel插件,上面有一个按钮,点击它会在一个新线程上调用一个WPF应用程序。当我关闭Excel时,如果没有打开我的WPF应用程序或者打开它然后再次关闭它,Excel会立即关闭,但是每当我打开应用程序然后关闭Excel时,Excel需要5-10秒才能关闭。我只找到了以下两种解决方案,但都没有帮助:
在主线程上引发了一个事件(ThisAddin.vb),其代码如下:
我正在运行VS 2010和Excel 2010,所以不应该存在互操作性问题。
有人有建议吗?
线程代码:
Private qbdThread As Thread = Nothing
Private frmQBD As QBDApplication.MainWindow
qbdThread = New Thread(New ParameterizedThreadStart(AddressOf RunQBD))
qbdThread.SetApartmentState(Threading.ApartmentState.STA)
qbdThread.Start(TabletType)
AddHandler QBDApplication.MainWindow.QBDClose, AddressOf QBDThreadClose
Private Sub RunQBD(Optional tabletQBDSelected As String = Nothing)
...
frmQBD = New QBDApplication.MainWindow(contacts, saveLocation, tabletQBDLocal)
frmQBD.Show()
frmQBD.Activate()
System.Windows.Threading.Dispatcher.Run()
End Sub
当用户在新线程上关闭应用程序时,此代码将运行:
Me.Close()
System.Windows.Threading.Dispatcher.CurrentDispatcher.InvokeShutdown()
在主线程上引发了一个事件(ThisAddin.vb),其代码如下:
Private Sub QBDThreadClose()
qbdThread = Nothing
frmQBD = Nothing
End Sub
需要注意的另一件事是,当frmQBD不作为类变量创建,而是在“RunQBD”子程序中定义尺寸时,就不会出现这个问题。这可以解决我的问题,但我将无法像frmQBD.Activate()那样在主线程上访问它,而这正是我需要做的。
编辑:代码已更新