如果您在多執行緒案例中使用 XslTransform FIX: System.InvalidOperationException

文章翻譯 文章翻譯
文章編號: 320011 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

徵狀

如果共用 XslTransform 物件從多個執行緒之間 System.Xml.Xsl 命名空間,您可能會收到下列錯誤訊息,當您建置應用程式:
System.InvalidOperationException: 集合已修改; 列舉作業可能無法執行。
呼叫堆疊可能出現,如下所示:
at System.Collections.ArrayListEnumeratorSimple.MoveNext()
    at System.Xml.XPath.XsltFunction.SetXsltContext(XsltContext context)
    at System.Xml.XPath.CompiledXpathExpr.SetContext(XmlNamespaceManager nsManager)
    at System.Xml.Xsl.Processor.GetValueQuery(Int32 key)
    at System.Xml.Xsl.Processor.ValueOf(ActionFrame context, Int32 key)
    at System.Xml.Xsl.ValueOfAction.Execute(Processor processor, ActionFrame frame)
    at System.Xml.Xsl.ActionFrame.Execute(Processor processor)
    at System.Xml.Xsl.Processor.Execute()
    at System.Xml.Xsl.XslTransform.Transform(IXPathNavigable input,XsltArgumentList args, TextWriter output)
				
這個問題只曾發生雖然可以在單一處理器的電腦上可能也發生此問題,有一個以上處理器的電腦上發生。

發生的原因

之所以發生這個問題,因為是 System.Xml.dll 組件中有錯誤。

解決方案

如果要解決這個問題,取得 Microsoft.NET Framework 為最新的 Service Pack。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
318836資訊: 如何取得最新的.NET Framework Service Pack
注意: 套用此修正程式的系統上已經有 Microsoft.NET Framework 安裝的服務套件 1。

此修正程式的英文版應該具有下列檔案屬性或更新版本:
   Date          Version        Size              File name
   -------------------------------------------------------------
   03-APR-2002   1.0.3705.223   1,294,336 bytes   System.Xml.dll	
				

因應措施

如果要解決這個問題,使用 lock 陳述式 (在 Microsoft Visual C#.NET) 或 SyncLock...結束 SyncLock 建構 Microsoft Visual Basic.NET) 中的保護 轉換 方法的使用。不過,這項因應措施可能會造成一個無法接受的效能產生負面影響的視設計和您的應用程式的目的。

可能會提供較佳的效能的另一個解決方法是建立實作一個集區或 N + 1 的快取的解決方案 XslTransform 物件其中 N 是在電腦上的處理器數目。

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的問題。這個問題,首先已經在 Microsoft.NET Framework Service Pack 2 (SP2) 中獲得修正。

屬性

文章編號: 320011 - 上次校閱: 2013年10月24日 - 版次: 3.1
這篇文章中的資訊適用於:
  • Microsoft .NET Framework Service Pack 1
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
關鍵字:?
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbnetframe100presp2fix kbnetframe100sp2fix KB320011 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:320011
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com