public class Item { private readonly string filename; private string code; public string Code { get { lock( this ) { return code; } } set { lock( this ) { code = value; } } } public Item( string filename ) { this.filename = filename; if( !File.Exists(filename) ) { code = "(no code)"; return; } XmlDocument doc = new XmlDocument(); doc.Load(filename); code = doc.SelectSingleNode("/item/code").InnerText; } public void Update() { string tempFullPath = Path.ChangeExtension(filename,".$$$"); string bakFullPath = Path.ChangeExtension(filename,".bak"); lock( this ) { XmlTextWriter writer = new XmlTextWriter(tempFullPath,System.Text.Encoding.UTF8); try { writer.WriteStartElement("item"); writer.WriteElementString("code",code); } finally { writer.Close(); } if( File.Exists(filename) ) { File.Delete(bakFullPath); File.Move(filename,bakFullPath); } File.Move(tempFullPath,filename); } } }