如何在队列中启动多个线程?

时间:2012-02-25 01:01:57

标签: c# multithreading queue

我正在制作服务器客户端应用程序。客户端可以管理服务器文件(重命名/复制/删除等)。当我选择多个类似(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); 
    }
}

2 个答案:

答案 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); 

        }
    }
}