【发布时间】:2015-06-27 13:35:20
【问题描述】:
我有针对 .NET 4.0 客户端配置文件的 VB.NET 解决方案,其中包括 Excel 和 PowerPoint 加载项。每个程序集都有一个单独的程序集,第三个程序集的代码对两者都是通用的。因此,通用程序集是其他两个程序集的依赖项。
有时,当 common 程序集中的代码打开 MessageBox 时,它会在没有用户输入的情况下自动关闭,但不是可预测或可靠的。似乎 调用 程序集(即 Excel 插件)已从通用程序集中夺回对 UI 的控制权(可能与线程有关?),或者调用汇编代码在显示 MessageBox 时继续执行。
我在解决方案的各个完全独立的部分中观察到了这种行为,但无法弄清楚问题出在哪里。同样,这种情况并非一直发生,我无法可靠地重现这种情况。我正在 Office 2013 中的 Windows 8.1 上对此进行测试。
很遗憾,确实没有任何相关代码可以发布,除了:
MessageBox.Show(...)
我希望有人可以提供一些关于这里可能发生的事情的见解,并提供修复。
编辑
在下面合并 Hans 的建议后,我的代码现在是:
MessageBox.Show(New WindowWrapper(handle), [Message], [Caption], MessageBoxButtons.OK, [Icon])
其中句柄 [Integer] = Excel.Application.Hwnd 和:
Public Class WindowWrapper
Implements IWin32Window
Private hwnd As IntPtr
Public Sub New(handle As IntPtr)
hwnd = handle
End Sub
Public Sub New(handle As Integer)
hwnd = New IntPtr(handle)
End Sub
Public ReadOnly Property Handle As IntPtr Implements IWin32Window.Handle
Get
Return hwnd
End Get
End Property
End Class
还是有同样的问题。
【问题讨论】:
标签: c# .net vb.net excel .net-assembly