Outlook加载项的弹出通知(从后台线程问题调用Form.Show())

Fah*_*imH 5 c# vsto winforms outlook-addin

我的Outlook 2010加载项(使用VSTO)在发送邮件时在不同的线程中执行一些Web服务调用.我想显示一个小的非模态弹出通知(如Skype/yahoo/Windows live messenger的通知),显示网络服务调用的结果.

我正在尝试根据我的要求自定义通知窗口项目.当使用以下代码从我的加载项的形式的单击事件处理程序调用时,它似乎工作正常:

private void btnOk_Click(object sender, EventArgs e)
{
    PopupNotifier notifier = new PopupNotifier();
    notifier.DisplayNotification("Test");
}
Run Code Online (Sandbox Code Playgroud)

但是,当从执行Web服务调用的后台线程调用相同的方法notifier.DisplayNotification("Test")时,通知程序挂起; 它的形式显示在屏幕上,但似乎没有文字,颜色或动画.它只是坐在那里,直到Outlook关闭.

我做了一些搜索,发现这可能发生,因为通知程序使用Show()方法而不是ShowDialog()来显示其表单.由于我不想弹出通知的模态对话框,我也无法将方法更改为ShowDialog().

根据其他文章,我也尝试使用backgroundWorkers,delegates,MethodInvoker等调用该方法,但无法获得所需的结果.

然而,在尝试上述内容时,我注意到不仅弹出通知程序,而且任何简单形式都会发生同样的情况.如果我在后台线程中创建它并调用Show()方法,它就会卡住,而在相同的情况下,ShowDialog()似乎工作正常.

任何关于如何解决这个问题的想法将不胜感激.

Fah*_*imH 2

我最终设法使用TaskbarNotifier项目解决了这个问题。