我的 Outlook 2010 加载项(使用 VSTO)在发送邮件时在不同的线程中执行一些 Web 服务调用。我想显示一个小的非模态弹出通知(如 Skype/yahoo/Windows live messenger 的通知),显示 Web 服务调用的结果。
我试图根据我的要求自定义通知窗口项目。当使用以下代码从我的加载项形式的单击事件处理程序调用时,它似乎工作正常:
private void btnOk_Click(object sender, EventArgs e)
{
PopupNotifier notifier = new PopupNotifier();
notifier.DisplayNotification("Test");
}
但是,当从执行 Web 服务调用的后台线程调用相同的方法notifier.DisplayNotification("Test")时,通知程序挂起;它的形式显示在屏幕上,但似乎没有文字、颜色或动画起作用。它只是坐在那里,直到 Outlook 关闭。
我进行了一些搜索,发现这可能会发生,因为通知程序使用 Show() 方法而不是 ShowDialog() 来显示其表单。而且由于我不想要弹出通知的模式对话框,因此我也无法将方法更改为 ShowDialog()。
根据其他文章,我也尝试过使用 backgroundWorkers、delegate、MethodInvoker 等调用该方法,但无法获得所需的结果。
但是,在尝试上述方法时,我注意到不仅弹出通知程序,任何简单的表单都会发生同样的情况。如果我在后台线程中创建它并调用 Show() 方法,它就会卡住,而在相同的情况下 ShowDialog() 似乎工作正常。
任何关于如何解决此问题的想法将不胜感激。