VSTO for Outlook - 浮动窗口令人难以置信的错误

本文关键字:窗口 令人难以置信 错误 for Outlook VSTO | 更新日期: 2023-09-27 18:34:48

此加载项的代码可在此处找到。演示行为的视频列在此解释的正文中。为方便起见,这里有两个链接错误解决方法

我一直在尝试使用Visual Studio 2010和2013为Outlook 2013编写加载项,但是我遇到了一个非常奇怪的错误。这些是重现在Outlook中安装加载项时发生的令人难以置信的错误的步骤。该平台是Windows 7 Enterprise上的Outlook 2010

  1. 双击电子邮件并在新窗口中将其打开(检查器窗口(
  2. 在Windows的任务栏中,您现在会注意到分层图标。在鼠标悬停时,窗口将显示主要的展望窗口和打开的电子邮件(以 Aero 主题呈现,如果已启用(
  3. 只需返回并关闭最大化的电子邮件即可。
  4. Windows任务栏仍然显示两个分层图标,如上所示,但现在如果你把鼠标悬停在上面电子邮件窗口 它不显示任何内容。它就像一个鬼东西,没有清理。

我可以证明这一点的最好方法是录制一个小视频,该视频可在此处获得

然而,这并不是故事的结局。它变得更好,更有趣。现在这样做。

  1. 重新启动展望
  2. 再次像以前一样最大化电子邮件。
  3. 将鼠标悬停在任务栏中的图标上以显示两层窗口的内容。您也可以从此处关闭最大化窗口。来吧,这样做。
  4. 这次如您所见,电子邮件的窗口已正确消失!任务栏现在显示 Outlook 的单个图标。

为了说明这种行为,我录制了另一个视频,可在此处获得。

关于此行为需要注意的几点

  1. 这仅在 Outlook 2010 上发生。在 Outlook 2013 中,此行为不会显示。
  2. 我已将其缩小到一行代码。在 OutlookExplorerWrapper 中,如果注释了以下行,则行为将从 Outlook 2010 中消失

    var s = 邮件。身体;

实质上,简单地访问 MailItem 对象上的 Body 属性会导致此行为。我已经用RTFBody交换了身体,这再次使错误消失。

我在这里真的是机智的尽头。任何帮助都非常感谢!

VSTO for Outlook - 浮动窗口令人难以置信的错误

我查看了示例项目,没有注意到任何用于发布基础 COM 对象的语句。使用 System.Runtime.InteropServices.Marshal.ReleaseComObject 在完成使用 Outlook 对象后释放该对象。然后在 Visual Basic 中将变量设置为 Nothing(在 C# 中为 null(以释放对该对象的引用。您可以在 MSDN 中的系统释放对象一文中阅读有关此内容的详细信息。

需要立即释放代码中的基础 COM 对象。