我的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()似乎工作正常。
如何解决这个问题我将不胜感激。