Visual Basic“未处理的异常”
问题描述:
你好,我在尝试将序列号保存到XML文件时出现此错误。 如果该文件不存在,它将保存文件正常,但是如果我在Xml文件中将Registered tag更改为False,并再次尝试,则会显示“该进程无法访问该文件...因为它正在被另一个处理”。 在我的主要形式中,我从XML中读取信息,并在我的regform(如果在xml中注册标记为false,则打开它)我写入文件。是因为那个吗?!我不这么认为。 这里是我的注册类:Visual Basic“未处理的异常”
Imports System.IO
Imports System.Xml
Public Class RegistrationClass
Public Property SerialNumber As String
Public Property Registered As Boolean = False
Public Sub Write_Reg(ByVal FileString As String, ByVal RegisterName As String, ByVal RegisterCompany As String, ByVal RegisterSerialNumber As String)
Dim Registered As Boolean = False
Dim Comment As String = "StroySoft 2012 Register Database"
Dim SerialNumber As String = "dev-xxx-123"
Dim ClientOS As String = Trim(My.Computer.Info.OSFullName)
If RegisterSerialNumber = SerialNumber Then
Dim settings As New XmlWriterSettings()
settings.Indent = True
' Initialize the XmlWriter.
Dim XmlWrt As XmlWriter = XmlWriter.Create(FileString, settings)
With XmlWrt
' Write the Xml declaration.
.WriteStartDocument()
' Write a comment.
.WriteComment(Comment)
' Write the root element.
.WriteStartElement("Data")
' Start our first person.
.WriteStartElement("Register")
' The person nodes.
.WriteStartElement("Name")
.WriteString(RegisterName.ToString())
.WriteEndElement()
.WriteStartElement("Company")
.WriteString(RegisterCompany.ToString())
.WriteEndElement()
.WriteStartElement("SerialNumber")
.WriteString(RegisterSerialNumber.ToString())
.WriteEndElement()
Registered = True
.WriteStartElement("Registered")
.WriteString(Registered)
.WriteEndElement()
.WriteStartElement("ClientOS")
.WriteString(ClientOS)
.WriteEndElement()
' The end of this person.
.WriteEndElement()
' Close the XmlTextWriter.
.WriteEndDocument()
.Close()
End With
MsgBox("Успешна регистрация! Благодарим Ви!")
MainForm.РегистрацияToolStripMenuItem.Visible = False
Else
MsgBox("Невалиден сериен номер!")
End If
End Sub
Public Sub Check_Reg(ByVal FileString As String)
If (System.IO.File.Exists(FileString)) Then
Dim document As XmlReader = New XmlTextReader(RegForm.RegFile)
While (document.Read())
Dim type = document.NodeType
If (type = XmlNodeType.Element) Then
If (document.Name = "Registered") Then
If document.ReadInnerXml.ToString() = "True" Then
Registered = True
Else
Registered = False
End If
End If
If (document.Name = "SerialNumber") Then
SerialNumber = document.ReadInnerXml.ToString()
End If
End If
End While
Else
MessageBox.Show("The filename you selected was not found.")
End If
End Sub
End Class
答
是不是因为这一点?我不这么认为。
正是因为如此。
您应该始终确保通过将它们包装在Using
块中来妥善处置IDisposable资源,例如Streams和Writer/Readers。在你的情况下,我没有看到你关闭你的阅读器。但是如果你将它包装在Using块中,你不应该担心它。即使抛出异常,资源也会被正确释放。
例子:
Using XmlWrt As XmlWriter = XmlWriter.Create(FileString, settings)
...
End Using
你应该做同样的XmlReader
:
Using document As XmlReader = XmlReader.Create(RegForm.RegFile)
...
End Using