C# 将t的列表复制到线程时出现问题
我有一个多线程应用程序。线程管理器包含dbNodeList的对象列表C# 将t的列表复制到线程时出现问题,c#,multithreading,C#,Multithreading,我有一个多线程应用程序。线程管理器包含dbNodeList的对象列表 class dbNodeList { public string nodepath; public string nodename; public string nodevalue; //etc... } 在ThreadManager中,nodepath和nodename是预先填充的常量。在工作线程中,节点值从它正在处理的xml消息中提取出来 当threadmanager启动一个新线程时,它需
class dbNodeList
{
public string nodepath;
public string nodename;
public string nodevalue;
//etc...
}
在ThreadManager中,nodepath和nodename是预先填充的常量。在工作线程中,节点值从它正在处理的xml消息中提取出来
当threadmanager启动一个新线程时,它需要给该线程一个该列表的真实副本,这样当节点值被填充时,它对该线程是唯一的
因此,当启动一个线程时,我不能只说
NewThread.nodeList=ThreadManager.nodeList;
我认为这只是对TheadManager列表的引用。如果线程_1设置nodevalue,然后线程_2将其设置为另一个值,那么它现在在ad_1中不是不正确吗
谢谢,
Rut您需要手动实现一个复制功能,该功能将创建一个新对象,并在上面复制值
class dbNodeList
{
public string nodepath;
public string nodename;
public string nodevalue;
//etc...
public dbNodeList Copy()
{
var copy = new dbNodeList();
copy.nodepath = this.nodepath;
copy.nodename = this.nodename;
copy.nodevalue = this.nodevalue;
//etc...
return copy;
}
}
//used like
NewThread.nodeList = ThreadManager.nodeList.Copy();
任何可变引用类型的对象都需要对其进行额外的处理,才能使其成为一个类,有关差异的解释,请参见链接问题。类是一个引用类型,因此是的,您的新线程将只获得对现有类的引用。如果手动填充类不可行,则需要进行克隆。我发现最简单的方法就是使用序列化。这里有一个很棒的帖子:请看。