2009-02-07 154 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对象模型的事情上,您可能会看到一个显着的改进,即脱离单独的工作线程(或线程池)来处理已保存的附件。