【发布时间】:2016-08-31 19:12:08
【问题描述】:
当应显示“另存为”对话框时,我的 VSTO 加载项报告的多个用户挂起。 Excel 加载项和 Word 加载项都会发生这种情况。有趣的是,在对文档调用“另存为”命令时,这两个应用程序也往往会挂起。
我很难解决这个问题,因为整个应用程序只是在之后冻结
// using System.Windows.Forms;
SaveFileDialog dlg = new SaveFileDialog();
// lines to configure dlg left out
dlg.ShowDialog();
在这种情况下尝试关闭 Excel 或 Word 时,会出现“Excel/Word 无法关闭”消息框,人们不得不求助于任务管理器来摆脱它。
Excel 和 Word 都经常挂在“另存为”这一事实尤其令人不安,因为我看不出我的加载项如何干扰这些应用程序的内置“另存为”命令。
更糟糕的是,加载项甚至不需要加载。通过取消选中“COM 加载项”中的相应条目并重新启动应用程序来停用它们并不能解决问题。我必须完全删除加载项以确保“另存为”不会冻结应用程序。
这让我认为问题不是我的加载项中的代码,而仅仅是存在(非活动)VSTO 加载项会阻止文件对话框出现,从而导致挂起。
挂起并不总是发生,也不是在所有机器上都发生。很随意。
我将如何进一步调查?我有 Visual Studio Professional 2013,但不知道如何找出 Office 应用程序冻结的原因和位置。
【问题讨论】:
-
C# MSDN SaveFileDialog 您需要显示所有相关代码.. 如果您使用 COM Interop,也许您是 Marshal.Releating com 对象正确.. 请提供所有相关代码
-
可能是 SaveDialog 在另一个窗口后面。
-
@JimHewitt 是的,但我已经尝试过将 Excel/Word 窗口制作得非常小,以便对话框在某处可见。即使它由于某种原因显示在屏幕外,如果它具有焦点(并阻止 Word/Excel),按 ESC 应该将其关闭——但 ESC 不会做任何事情。
-
@MethodMan 我相信这确实是相关代码。我已经通过调试进行了广泛的测试,并且在调用
SaveFileDialog.ShowDialog()后确定挂起。加载项很大(例如github.com/bovender/xltoolbox)。 -
听起来你的代码有问题..如果你在世界范围内有很多用户,那么你似乎有一个潜在的问题,你在说什么类型的插件......再一次显示 2 行代码对任何人都没有帮助,也没有帮助解决您的问题。我会说从检查您的代码开始,以确保您正确处理代码中创建的对象..
标签: c# excel vsto freeze savefiledialog