c# – 如何在使用多线程时添加到列表?

我是多线程的新手,过去只玩过它.但我很好奇是否有可能在主线程上有一个字节数组列表,并且仍然能够在单独的线程中创建新的字节数组时添加到该列表.此外,我将使用for-each循环,它将遍历将用于解析为字节数组的表单列表.所以基本上伪代码就像这样……
reports = new List();

foreach (form in forms)  
{  
    newReport = new Thread(ParseForm(form));  
    reports.Add(newReport);  

}  

void ParseForm(form)  
{  
    newArray = new byte[];  
    newArray = Convert.ToBytes(form);  
    return newArray;  
}

希望上面的伪代码有一定意义.如果有人能告诉我这是否可行并指出我的方向,我相信我可以找出实际的代码.

解决方法

如果需要从多个线程访问集合,则应使用同步,或者如果.NET版本为3.0或更高版本,则使用 SynchronizedCollection.

以下是使线程可以访问集合的一种方法

SynchronizedCollection reports = new SynchronizedCollection();

foreach (form in forms) {  
    var reportThread = new Thread(() => ParseForm(form,reports));
    reportThread.Start();
}

void ParseForm(Form form,SynchronizedCollection reports) {  
    newArray = new byte[];  
    newArray = Convert.ToBytes(form);  
    reports.Add(newArray);
}

如果您使用的是.NET 4或更高版本,则可以通过System.Threading.Tasks命名空间的各种类来更好地替代手动管理线程.在决定线程实现之前,请考虑探索此替代方案.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...