Как мне начать много потоков в очереди? - PullRequest
1 голос
/ 25 февраля 2012

Я делаю сервер-клиентское приложение. Клиент может управлять файлами сервера (переименовывать / копировать / удалять и т. Д.). Когда я выбираю более одного файла (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 голосов
/ 25 февраля 2012

Я думаю, что здесь нет смысла использовать темы. Вы просто усложняете свой код и занимает слишком много памяти (каждому потоку требуется 1 МБ памяти). Сделайте что-то подобное, и вам не придется беспокоиться об очередях или блокировках:

private void Paste()
{
    foreach (ListViewItem item in copiedItems)
    {
        fmc.PasteFromCopy(item.Text, somePath);
    }
}

EDIT:

Если вам нужно использовать поток, отличный от основного потока, поскольку вы не хотите его блокировать, вы можете использовать один поток, который выполняет все операции копирования. Что-то вроде:

private void Paste()
{
    var thread = new Thread(() =>
    {
        foreach (ListViewItem item in copiedItems)
        {
            fmc.PasteFromCopy(item.Text, somePath);
        }
    });
    thread.Start();
}

По-прежнему не нужно использовать блокировки и значительно более эффективно использовать память, чем ваше решение со многими потоками.

0 голосов
/ 25 февраля 2012

Я понял это

public void PasteFromCopy(string source,string dest)
{
    lock(this)
    {
        if (IsFolder(source))
        {
            CopyDirectory(source, dest);
        }
        else
        {
            CopyStream(source, dest); 

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...