在显示ProgressBar时设置MailItem只读(VSTO的Outlook加载项)

时间:2015-11-16 12:29:26

标签: c# multithreading outlook vsto

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

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

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

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

  1. 如果尚未完成任务,则会取消发送和新线程 将为任务创建并启动。
  2. 任务完成后,bool变量将设置为true(=已完成任务)。
  3. 此外,还将调用Mailitem的send方法。
  4. 这也很好。但随后进度条的模态形式不再是模态的..用户可以与Outlook交互(好!)。但是,当任务正在运行且进度条显示时,他也可以与MailItem交互(不好!)......

    所以问题是,如何阻止MailItem,将其设置为只读或不同的东西以避免用户在显示进度条时修改MailItem?

1 个答案:

答案 0 :(得分:0)

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

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