在 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
我目前正在尝试使用线程在 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