2016-03-23 5 views
0

イムループ:単語field.updateは、Word文書内のすべてのフィールドを更新するには、このコードを使用して、特定のドキュメントに

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     int i = 0; 
     foreach (Word.Field field in Doc.Fields) 
     { 
      try 
      { 
       field.Update(); 
      } 
      catch (Exception ex) { Console.WriteLine(ex.Message); } 
      backgroundWorker1.ReportProgress(i); 
      i++; 
     } 
    } 

これは私の文書のほとんどで動作しますが、何とかこのコードは終了1つの文書がありますいくつかのループでアップ。 ReportProgressのみが範囲外のエラーをスローします。これは、更新されるより多くのフィールドがドキュメント内に存在する必要があるためです。それ以外にもエラーメッセージは表示されません。

ここで、この問題に取り組む方法、コードで質問する方法、または単語のドキュメントで何が間違っているのかを調べることができますが、問題を追跡するのに役立つものはまだ見つかりませんでした。

これはおそらく単語の既知の問題ですか? これに取り組む方法や、docという言葉で何が間違っているかを見つけるためのその他のアドバイスはありますか?

+0

なぜフィールドをループするのですか?簡単なのはなぜですか?doc.Fields.Update(); 2:通常、バックグラウンドスレッドでOfficeを使用するのは良い考えではありません。オフィスはSTAです... –

答えて

0

実際のドキュメントを見ることなく、推測できるのですが、特定のフィールドを更新すると、反復処理中のフィールドコレクションが変更されることがあります。あなたは、foreachループが終了することを確信することができ

var fieldsToUpdate = Doc.Fields.OfType<Field>().ToList(); 
foreach (var field in fieldsToUpdate) 
{ 
    field.Update(); 
} 

その方法を:あなたがループを開始する前に

このような場合の回避策

は、フィールドの「スナップショット」を取ることであろう。

関連する問題