我有一个单词加载项,用C#编写。当用户从功能区中选择一个选项时,应用程序(Word)中将打开一个自定义任务窗格(用户控件)。
在此任务窗格中,他们按下运行,并以一系列相当复杂的方式分析活动文档。检查,例如询问文档中的任何粗体文本等等。运行整个过程可能需要5秒到1分钟,具体取决于文档。这很好,没有人对此有任何疑问。
当我们尝试实施取消按钮时出现问题。为此,我尝试使用后台工作程序。一切正常....除了当从线程(后台工作者)与文档进行通信时,它比从主线程运行时慢大约7-8倍。我无法找到关于此的更多信息,我们将非常感谢任何建议或帮助。
我尝试过其他途径(打开xml),但这些不是可行的选项(我们必须处理.doc和.docx)
由于
举个例子:
我在任务窗格上有一个按钮(运行)。
调用private void btnRun_Click
反过来,它会阻止后台工作者backgroundWorker1.RunWorkerAsync();
在后台工作者的do work方法中,我有以下代码:
myClass.Method()
在myClass中将是一行代码,例如:
对于ActiveDocument.Fields中的每个Word.Field
例如,从主按钮单击线程运行可能需要1秒,而从后台工作程序运行最多需要30秒。所有其他代码都能及时运行,只有代码可以访问似乎有问题的Word文档
答案 0 :(得分:0)
那是因为后台线程正在运行的是与Word的STA不同的COM公寓。
您可能需要考虑的另一种方法是显示对话框,然后在同一个线程中继续处理,不时地抽取Windows消息(例如,在较长的,可能是嵌套的循环的开头)。
当用户按下按钮时,您设置一个标志,您应该在整个代码中定期检查(可能就在您处理消息的地方之后)。
您可能需要自己实施UI模式:
完成处理后:
不要在任何阶段的步骤1和2之间抽取消息。