2009-02-07 152 views
2

我寫了一個Outlook加載項來過濾垃圾郵件。問題是,當插件正在完成其處理消息的工作時,尤其是在正在處理/閱讀的大型附件時,這需要花費大量時間,因此,主視圖用戶界面無法使用,響應和用戶不能對UI做任何事情。Outlook加載項,減慢outlook的用戶界面

是否有異步運行加載項處理的方式,以便Outlook UI保持不變。

加載項由於處理每條消息而做了很多事情,因此花費了很多時間。

回答

0

這就像其他任何程序基本上一樣。如果您需要在主線程之外執行某些操作(即創建另一個線程)。不過,沒有特定於Outlook的API或框架。

雖然您必須特別注意異常處理。從一個線程逃脫的未處理異常可能會產生最奇怪的結果(儘管在大多數情況下,Outlook只會崩潰)。

此外,如果有可能,您應該儘量避免或至少嚴格限制從處理線程中訪問Outlook對象模型。

最後,您應該確定的另一件事是,如果以任何方式直接或間接使用COM相關函數,您明確地呼叫CoInitializeEx/CoUninitialize

+0

是的,我明白了。所以我基本上需要產生一個新的Win32線程來處理每個項目?即,這將需要發生在COM加載項我採取了嗎?它用C++編寫。任何更多的技巧,請spawing這些線程:-) Thnaks。 – user61862 2009-02-08 13:59:35

+0

這就是主意,是的。你會發生什麼事? 雖然您不一定需要每個項目的線程。這完全取決於你。我自己並不是一個C++編碼器,所以我不能給你任何關於該語言的多線程編程的細節(除了向`CreateThread` API模糊的波浪) – 2009-02-08 14:23:33

2

如果大部分時間都花在Outlook API上,那麼創建另一個線程將無濟於事。由於Outlook中的線程模型,從另一個線程訪問對象模型會導致調用被編組到主線程,這意味着您的UI現在仍處於凍結狀態,並且後臺線程被阻塞。

如果大部分工作都花在做不接觸Outlook對象模型的事情上,您可能會看到一個顯着的改進,即脫離單獨的工作線程(或線程池)來處理已保存的附件。