2012-10-22 8 views
5

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.

Odpowiedz

Powiązane problemy