c# - 从多个线程访问 word 文档的单词列表

标签 c# vb.net vba office-interop

我最近在 Word 对象模型的性能方面遇到了一些问题。在我为 Word 编写的加载项中,我需要解析文档中的所有单词并替换其中的一些单词,或者向用户询问具有多个替换的单词。我知道一次向 Word 询问所有文档文本内容然后处理它并再次将其全部放回会更快,但这不适合我的加载项,因为我需要访问范围表示具有多个替换词的对象,以便我可以以某种方式在文档中标记它们,并向用户提供一个工具提示,他可以从中选择他想要的替换词。

所以目前我想到的唯一一个巨大的速度改进是多线程,因为大多数人已经拥有双核或更好的。问题是您在 Google 上找到的所有内容都表明在 Office 中使用多线程是一件非常糟糕的事情。

那么,有没有人设法以一种在大多数情况下都能奏效的方式做到这一点?我的意思是,如果它也能在其他 PC 上运行,那么开发的 PC?

第二个问题是:有人知道为什么 Microsoft 将 Word (Office) 对象模型限制为单线程吗?只是出于好奇:)

最佳答案

Office 中的多线程应该可以正常工作。这是 Microsoft 的一篇文章,介绍了如何做到这一点:

Walkthrough: Multithreading with the BackgroundWorker Component (C# and Visual Basic)

Office 对象模型不是单线程的,而是单线程单元 (STA)。这实际上是所有 VB.Net 程序的默认状态(C# 默认为 MTA)。要了解有关 STA 与 MTA 的更多信息,请查看以下链接:

关于c# - 从多个线程访问 word 文档的单词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350087/

相关文章:

vb.net - 在 FormView 文本框中插入空字符串会将其转换为 null

vba - 从 Excel 运行 Access 查询

excel - 为什么我不应该将某些对象引用转换为对象变量?指导方针是什么?

vba - 全屏编码

c# - 如何永久重命名 C# 项目的 Properties 命名空间

c# - 将 INSERT 查询批处理到 SQL 2005/8 中的最有效和最简单的方法是什么

c# - 什么时候在 C# 中使用委托(delegate)?

c# - 将我在 Visual 2010 中的项目定位到 .Net 4.0,但系统仍在寻找 dll 'System.Core version 2.0.5.0'

c# - 在 CompareTo() 覆盖中有效禁用 Sort()?

asp.net-mvc - VB.NET MVC 重载解析失败,因为没有可访问的 'Create' 接受此数量的参数