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

时间:2012-10-22 06:28:05

标签: c# winforms vsto outlook-addin

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

我试图根据我的要求自定义Notification Window project。当使用以下代码从我的加载项的形式的单击事件处理程序调用时,它似乎工作正常:

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

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

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

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

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

如何解决这个问题我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我最终设法使用TaskbarNotifier项目来解决问题。