首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Word外接程序自定义TaskPane后台工作人员速度问题

C# Word外接程序自定义TaskPane后台工作人员速度问题
EN

Stack Overflow用户
提问于 2015-04-18 15:17:38
回答 1查看 272关注 0票数 0

我有一个词加载项,是用C#写的.当用户从带中选择一个选项时,将在应用程序(Word)中打开自定义任务窗格(用户控件)。

在此任务窗格中,它们按run,并以一系列相当复杂的方式对活动文档进行分析。检查,例如询问文档中的任何粗体文本等等。在运行整个进程时,根据文档的不同,从5秒到1分不等。很好,没人对此有意见。

当我们尝试实现一个cancel按钮时,问题就出现了。为此,我尝试使用后台工作人员。一切正常..。除了从线程(后台工作人员)与文档通信时,它比从主线程运行时慢7-8倍。我还没有找到很多关于这方面的信息,任何建议或帮助都将不胜感激。

我尝试过其他途径(打开xml),但这些都不是可行的选择(我们必须处理.doc和.docx)。

谢谢

举一个例子:

我在任务窗格上有一个按钮(运行)。

它称为私有的void btnRun_Click

这反过来又触发了后台工作人员--Worker1.RunWorkerAsync();

在后台工作者的do work方法中,我有如下代码:

myClass.Method()

在myClass中将有一行代码,如:

对于ActiveDocument.Fields中的每个ActiveDocument.Fields

从主按钮单击线程运行可能需要1秒,从后台工作人员运行最多需要30秒。所有其他代码都能很好地工作,只有访问Word文档的代码才会出现问题。

EN

回答 1

Stack Overflow用户

发布于 2015-04-20 18:00:28

这是因为后台线程运行的是一个不同于Word的STA的COM单元。

您可能需要考虑的另一种方法是显示对话框,然后在同一个线程中继续处理,不时地将Windows消息泵入其中(例如,在长循环(可能是嵌套循环)的开头)。

当用户按下按钮时,您设置了一个标志,您应该定期检查整个代码(可能就在您处理消息的位置之后)。

您可能需要自己实现UI模式:

  1. 显示您的窗口,例如Word作为自己的窗口,并确保它是集中的
  2. 禁用拥有的窗口

当您完成处理时:

  1. 启用拥有的窗口
  2. 关上你的窗户

不要在两个阶段的第1步和第2步之间传递消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29719179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档