Collections Word VSTO加载项中存在间歇性问题,打开第二个现有RTF文件会覆盖文档集合中活动的未保存空白文档

Collections Word VSTO加载项中存在间歇性问题,打开第二个现有RTF文件会覆盖文档集合中活动的未保存空白文档,collections,vsto,document,word-interop,Collections,Vsto,Document,Word Interop,这是一个要添加的单词。它具有将RTF文件插入当前打开的文档的功能。为了最大限度地提高性能,我不使用另一个(不可见的)word实例打开RTF文件。相反,我使用Word的当前实例将RTF作为不可见文档打开,读取其XML,然后在当前插入点将其插入文档中 我正在使用Documents.Open方法。因此,我的期望是文档集合最初会打开单词doc。然后,当我的外接程序打开RTF文件时。它将作为doc#2添加到文档集合中 在大多数情况下,这种方法是有效的,即问题是间歇性的。外接程序在调试器中以及在Word中长

这是一个要添加的单词。它具有将RTF文件插入当前打开的文档的功能。为了最大限度地提高性能,我不使用另一个(不可见的)word实例打开RTF文件。相反,我使用Word的当前实例将RTF作为不可见文档打开,读取其XML,然后在当前插入点将其插入文档中

我正在使用
Documents.Open
方法。因此,我的期望是文档集合最初会打开单词doc。然后,当我的外接程序打开RTF文件时。它将作为doc#2添加到文档集合中

在大多数情况下,这种方法是有效的,即问题是间歇性的。外接程序在调试器中以及在Word中长时间使用发布版本时都按预期运行,然后,在打开RTF文件时,外接程序有时会挂起。在调试器中,为了调试目的,我将RTF的打开更改为可见,在这种状态下,我可以看到问题是,当打开RTF文件时,打开的原始文档从文档集合中消失,RTF文件成为文档集合中的第一个也是唯一一个文档。因此,当然,当我将RTF XML加载到最初打开的文档中时,它会崩溃,因为最初打开的文档已从文档集合中消失

顺序:

  • 打开一个新的空白Word文档
  • 单击功能区按钮以插入RTF文件
  • 在打开RTF文档之前和之后,观察文档收集
我希望RTF文件被添加,并成为该系列中的第二个。相反,它似乎替换了最初打开的文档

在打开RTF之前

打开RTF后

相关代码

object refMissing = System.Reflection.Missing.Value;

//deselect all text
direction = Word.WdCollapseDirection.wdCollapseStart;
Globals.ThisAddIn.Application.Selection.Collapse(ref direction);

// Insert template text at insertion point
Word.Selection objTargetSelectionInsertionPoint = Globals.ThisAddIn.Application.Selection;

if (Globals.ThisAddIn.Application.Options.Overtype)
{
    Globals.ThisAddIn.Application.Options.Overtype = false;
}

// Test to see if selection is an insertion point.
if (objTargetSelectionInsertionPoint.Type == Word.WdSelectionType.wdSelectionIP)
{
    Word.Document objTempWordDocument = Globals.ThisAddIn.Application.Documents.Open(Visible: true, FileName: fqTempFileName, ReadOnly: false);
    
    objTempWordDocument.Content.Select();

    Word.Range objSourceRange = objTempWordDocument.ActiveWindow.Selection.Range;   
    
    objTargetSelectionInsertionPoint.Range.InsertXML(objSourceRange.XML);

    objTargetSelectionInsertionPoint.EndKey(WdUnits.wdStory);

    object doNotSaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
    objTempWordDocument.Close(ref doNotSaveChanges, ref refMissing, ref refMissing);
}