我一直在创建多个后台线程来解析XML文件并重新创建新的XML文件。现在我遇到的问题是,即使我在全局变量上使用synclock,我仍然有时会出错,我相信这只是我正在编码的粗略方式,但我想知道是否有人更好选项。 程序流程=线程还没有掌握..仍然有ioexception错误
- 访问本地文件夹,并上传所有文件到列表
- 条每个文件转换成XML条目,并把这些条目到一个ArrayList
- 为特定值解析和这些值输入到数据库表
- 现在创建一个线程,并采取条目的ArrayList和线程将重新分析
- 线程解析,并创建一个新的XML文件
- 主线程继续用诺特尔功能,然后进入并从列表
一个文件,我将添加一些代码来显示问题区域,但如果我在使用声明的全局变量做不同的线程覆盖在变量造成污染该值。
For Each g In resultsList
gXmlList.Add(g)
Next
Dim bgw As New BackgroundWorker
bgw.WorkerSupportsCancellation = True
AddHandler bgw.DoWork, New DoWorkEventHandler(AddressOf createXML)
AddHandler bgw.RunWorkerCompleted, AddressOf WorkComplete
threadlist.Add(bgw)
bgw.RunWorkerAsync()
Private Sub createXML()
num += 1
Dim file As String = Module1.infile
xmlfile = directoryPath & "\New" & dateTime.Now.ToUniversalTime.ToString("yyyyMMddhhmmss") & endExtension
Thread.Sleep(2000)
Dim doc As XmlDocument = New XmlDocument
**xwriter = New XmlTextWriter(xmlfile, Encoding.UTF8)** this is where ioexception error
xwriter.Formatting = Formatting.Indented
xwriter.Indentation = 2
xwriter.WriteStartDocument(True)
xwriter.WriteStartElement("Posts")
我有全局变量通过应用程序,我应该锁定每一个,这样做不使用线程,然后没用。
Dim j As Integer = 0
不是你问题的原因,但不要使用`New XmlTextWriter`。改为使用`XmlWriter.Create`。从.NET 2.0开始,新的XmlTextWriter已被弃用。 – 2011-02-13 00:26:42