我有一个词加载项,是用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文档的代码才会出现问题。
发布于 2015-04-20 18:00:28
这是因为后台线程运行的是一个不同于Word的STA的COM单元。
您可能需要考虑的另一种方法是显示对话框,然后在同一个线程中继续处理,不时地将Windows消息泵入其中(例如,在长循环(可能是嵌套循环)的开头)。
当用户按下按钮时,您设置了一个标志,您应该定期检查整个代码(可能就在您处理消息的位置之后)。
您可能需要自己实现UI模式:
当您完成处理时:
不要在两个阶段的第1步和第2步之间传递消息。
https://stackoverflow.com/questions/29719179
复制相似问题