我写了一个Outlook加载项来过滤垃圾邮件。问题是,当插件正在完成其处理消息的工作时,尤其是在正在处理/阅读的大型附件时,这需要花费大量时间,因此,主视图用户界面无法使用,响应和用户不能对UI做任何事情。Outlook加载项,减慢outlook的用户界面
是否有异步运行加载项处理的方式,以便Outlook UI保持不变。
加载项由于处理每条消息而做了很多事情,因此花费了很多时间。
我写了一个Outlook加载项来过滤垃圾邮件。问题是,当插件正在完成其处理消息的工作时,尤其是在正在处理/阅读的大型附件时,这需要花费大量时间,因此,主视图用户界面无法使用,响应和用户不能对UI做任何事情。Outlook加载项,减慢outlook的用户界面
是否有异步运行加载项处理的方式,以便Outlook UI保持不变。
加载项由于处理每条消息而做了很多事情,因此花费了很多时间。
这就像其他任何程序基本上一样。如果您需要在主线程之外执行某些操作(即创建另一个线程)。不过,没有特定于Outlook的API或框架。
虽然您必须特别注意异常处理。从一个线程逃脱的未处理异常可能会产生最奇怪的结果(尽管在大多数情况下,Outlook只会崩溃)。
此外,如果有可能,您应该尽量避免或至少严格限制从处理线程中访问Outlook对象模型。
最后,您应该确定的另一件事是,如果以任何方式直接或间接使用COM相关函数,您明确地呼叫CoInitializeEx
/CoUninitialize
。
如果大部分时间都花在Outlook API上,那么创建另一个线程将无济于事。由于Outlook中的线程模型,从另一个线程访问对象模型会导致调用被编组到主线程,这意味着您的UI现在仍处于冻结状态,并且后台线程被阻塞。
如果大部分工作都花在做不接触Outlook对象模型的事情上,您可能会看到一个显着的改进,即脱离单独的工作线程(或线程池)来处理已保存的附件。
是的,我明白了。所以我基本上需要产生一个新的Win32线程来处理每个项目?即,这将需要发生在COM加载项我采取了吗?它用C++编写。任何更多的技巧,请spawing这些线程:-) Thnaks。 – user61862 2009-02-08 13:59:35
这就是主意,是的。你会发生什么事? 虽然您不一定需要每个项目的线程。这完全取决于你。我自己并不是一个C++编码器,所以我不能给你任何关于该语言的多线程编程的细节(除了向`CreateThread` API模糊的波浪) – 2009-02-08 14:23:33