我正在制作服务器客户端应用程序。客户端可以管理服务器文件(重命名/复制/删除等)。当我选择多个类似(n)文件进行复制/粘贴时,它会启动(n) pasteC
的线程我需要一种方法让它们在队列中。我怎么做???
private void Paste()
{
foreach (ListViewItem item in copiedItems)
{
Thread pasteC = new Thread(unused => fmc.PasteFromCopy(item.Text, somePath));
pasteC.Start();
}
}
代码向下是在fmc类..
public void PasteFromCopy(string source,string dest)
{
if (IsFolder(source))
{
CopyDirectory(source, dest);
}
else
{
CopyStream(source, dest);
}
}
答案 0 :(得分:0)
我认为没有理由在这里使用线程。您只是使代码更复杂并消耗太多内存(每个线程需要1 MB内存)。做这样的事情,你不必担心队列或锁定:
private void Paste()
{
foreach (ListViewItem item in copiedItems)
{
fmc.PasteFromCopy(item.Text, somePath);
}
}
修改强>
如果您需要使用主线程以外的线程,因为您不想将其锁定,您可以使用一个线程执行所有复制。类似的东西:
private void Paste()
{
var thread = new Thread(() =>
{
foreach (ListViewItem item in copiedItems)
{
fmc.PasteFromCopy(item.Text, somePath);
}
});
thread.Start();
}
仍然不需要使用锁,并且比使用多线程的解决方案具有更高的内存效率。
答案 1 :(得分:-1)
我已经明白了
public void PasteFromCopy(string source,string dest)
{
lock(this)
{
if (IsFolder(source))
{
CopyDirectory(source, dest);
}
else
{
CopyStream(source, dest);
}
}
}