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

本文关键字:VSTO Outlook 加载项 只读 时将 ProgressBar MailItem 设置 显示 | 更新日期: 2023-09-27 18:22:02

我正在用VSTO在C#中为Outlook创建一个外接程序。

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

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

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

  1. 如果任务尚未完成,则将取消发送并创建一个新线程将为任务创建并启动
  2. 任务完成后,bool变量将设置为true(=任务已经完成)
  3. 此外,还将调用Mailitem的send方法

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

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

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

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

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