从加载项调用 WPF 时 Excel 关闭缓慢

use*_*ser 4 vb.net wpf excel add-in

我有一个 Excel 加载项,上面有一个按钮,可以在新线程上调用 WPF 应用程序。当我在没有打开 WPF 应用程序或打开它然后再次关闭它之后关闭 Excel 时,Excel 会立即关闭,但是,每当我打开应用程序然后关闭 Excel 时,Excel 需要 5-10 秒才能关闭。我只遇到过这些解决方案,但都没有帮助:

我正在运行 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
Run Code Online (Sandbox Code Playgroud)

此代码在用户在新线程上关闭应用程序时运行:

Me.Close()
System.Windows.Threading.Dispatcher.CurrentDispatcher.InvokeShutdown()
Run Code Online (Sandbox Code Playgroud)

然后使用以下代码在主线程 (ThisAddin.vb) 上引发一个事件:

Private Sub QBDThreadClose()
    qbdThread = Nothing
    frmQBD = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

要注意的另一件事是,当 frmQBD 不是作为类变量创建,而是在“RunQBD”子中进行标注时,不会发生此问题。这将解决我的问题,但随后我将无法在主线程上访问类似 frmQBD.Activate() 的内容,而我需要这样做。

编辑:代码已更新

Sum*_*ime 5

我们找到了解决此问题的方法。

你必须在框架中设置一个AppSwith

Public Sub EnablePointerSupport()
AppContext.SetSwitch("Switch.System.Windows.Input.Stylus.EnablePointerSupport",True)
End Sub
Run Code Online (Sandbox Code Playgroud)

您可以在此处此处找到有关它的更多信息。

  • 您刚刚帮助我解决了过去 6 个月以来一直困扰我的 Jira 问题!感谢您发布您的答案! (2认同)