【问题标题】:Set MailItem readonly while a ProgressBar is shown (Outlook Add-In by VSTO)在显示 ProgressBar 时将 MailItem 设置为只读(VSTO 的 Outlook 加载项)
【发布时间】:2016-02-17 13:19:17
【问题描述】:

我正在使用 VSTO 在 C# 中为 Outlook 创建加载项。

在发送 MailItem 之前,将在发送事件中完成一些特殊任务。完成此任务后,将显示带有进度条的模态表单。这很好用。但是在显示进度条时,用户无法与 Outlook 交互。整个 Outlook 被冻结。 -> 我希望用户可以在要发送的 MailItem 上完成任务时与 Outlook 进行交互。

所以我为特殊任务创建了一个新线程,包括显示进度条。 以下步骤将在发送事件中完成:

如果任务已经完成,请检查布尔变量。

  1. 如果任务还没有完成,发送将被取消并且一个新的线程 将为任务创建并启动。
  2. 任务完成后,布尔变量将设置为 true(= 任务已完成)。
  3. 还会调用 Mailitem 的发送方法。

这也很好用。但是,带有进度条的模态表单不再是模态的了。用户可以与 Outlook 交互(好!)。但他也可以在任务运行和显示进度条时与 MailItem 交互(不好!)...

所以问题是,我怎样才能阻止 MailItem,将其设置为只读或其他方式以避免用户在显示进度条时修改 MailItem?

【问题讨论】:

    标签: c# multithreading outlook vsto


    【解决方案1】:

    您只需为 ShowDialog 方法指定(打开的检查器窗口的)父窗口句柄。在这种情况下,在隐藏进度条之前,用户将无法与打开的电子邮件进行交互。

    Inspector 窗口的一个实例可以转换为IOleWindow 接口,您可以在其中获取窗口句柄。有关详细信息,请参阅IOleWindow::GetWindow 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-01
      • 2013-05-16
      • 2018-05-07
      • 2018-08-01
      • 1970-01-01
      • 2021-06-29
      • 2021-02-27
      • 2011-12-30
      相关资源
      最近更新 更多