Dodatek My Outlook 2010 (przy użyciu VSTO) wykonuje niektóre wywołania usługi WWW w innym wątku po wysłaniu wiadomości. Chciałbym wyświetlić małe, niemodalne powiadomienie wyskakujące (na przykład komunikator Skype/yahoo/Windows Live Messenger) wyświetlające wynik wywołania usługi internetowej.Wyskakujące powiadomienie dla programu Outlook Add-in (wywoływanie Form.Show() z wątku z wątkiem tła)
Próbowałem dostosować Notification Window project zgodnie z moimi wymaganiami. To wydaje się działać poprawnie, gdy wywoływana z procedury obsługi zdarzenia Click formie dodatku w moim stosując następujący kod:
private void btnOk_Click(object sender, EventArgs e)
{
PopupNotifier notifier = new PopupNotifier();
notifier.DisplayNotification("Test");
}
Jednak, gdy ta sama metoda notifier.DisplayNotification („Test”) nazywa z wątku tła wykonującego wywołanie usługi internetowej, powiadamiający zawiesza się; Jego forma jest wyświetlana na ekranie, ale żaden tekst, kolor ani animacja nie działają. Siedzi tam, dopóki Outlook nie zostanie zamknięty.
Zrobiłem kilka wyszukiwania i okazało się, że może się to zdarzyć, ponieważ zgłaszający używa metody Show() zamiast ShowDialog() do wyświetlania swojego formularza. A ponieważ nie chcę modalnego okna dialogowego dla wyskakującego powiadomienia, nie mogę zmienić metody na ShowDialog().
Zgodnie z innymi artykułami, próbowałem również wywoływanie metody przy użyciu backgroundWorkers, delegatów, MethodInvoker, itp., Ale nie udało się uzyskać pożądanego rezultatu.
Jednakże, próbując powyższego, zauważyłem, że to samo dzieje się nie tylko z powiadomieniem pop-up, ale w dowolnej prostej formie. Jeśli utworzę go w wątku w tle i wywołam metodę Show(), po prostu utknie, podczas gdy w tej samej sytuacji ShowDialog() wydaje się działać dobrze.
Każdy pomysł, jak to naprawić, byłby bardzo doceniony.