Public Class Item Private ReadOnly filename As String Private m_code As String Public Property Code() As String Get SyncLock Me Return m_code End SyncLock End Get Set(ByVal Value As String) SyncLock Me m_code = Value End SyncLock End Set End Property Public Sub New(ByVal filename As String) Me.filename = filename If Not File.Exists(filename) Then Code = "(no code)" Return End If Dim doc As XmlDocument = New XmlDocument doc.Load(filename) Code = doc.SelectSingleNode("/item/code").InnerText End Sub Public Sub Update() Dim tempFullPath As String = Path.ChangeExtension(filename, ".$$$") Dim bakFullPath As String = Path.ChangeExtension(filename, ".bak") SyncLock Me Dim writer As XmlTextWriter = New XmlTextWriter(tempFullPath, System.Text.Encoding.UTF8) Try writer.WriteStartElement("item") writer.WriteElementString("code", Code) Finally writer.Close() End Try If File.Exists(filename) Then File.Delete(bakFullPath) File.Move(filename, bakFullPath) End If File.Move(tempFullPath, filename) End SyncLock End Sub End Class