在 C# 中使用 lock() 锁定线程访问的对象

Lock objects accessesd by threads using lock() in c#

我目前正在尝试使用线程在 c# 中读取数据并将数据写入 xml 文件,我有一个实用程序 class,它具有读取 XML 文件的功能,并且然后将数据写入xml。我的做法如下。

public class XMLUtil
{

 String lockingObject = "";

 public bool WriteToXml(Product product)
 {
   lock(lockingObject)
   {
       XDocument xDoc = XDocument.Load("file.xml")
   }

   //Code to add data to XElement

   xDoc.Add(xElement)
   lock(lockingObject)
   {
       XDocument xDoc = XDocument.Save("file.xml")
   }
 }

}


public class SomeOtherClass
{

   XMLUtil xmlUtil = new XMLUtil();

   private async void btn_Click(object sender, EventArgs e)
   {
     bool t = await Task.Run(() => xmlUtil.WriteToXml());
   }
}
static class Program
{

// default methods

while (true)
{
   t = await Task.Run(() => XMLUtil.CheckChanges());
   await Task.Delay(20000);
}


}

我还有一个后台线程不断检查 XML 文件中的更改以将视图重新加载给用户,因此我仍然得到 IO/Exception 说该文件是已被使用所以打不开...请问如何解决?

字符串驻留在 .NET 中(MSDN 参考),您不必将它们用作 lock 结构。尝试将 lockingObject 定义为

private static object lockingObject = new object();

并在里面使用lock