Как вызвать функцию одновременно много раз ?

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Как вызвать функцию одновременно много раз ?

Сообщение dmitriy22 » 27.08.2010 (Пт) 17:56

подскажите в каком направлении копать ?

есть программа, в которой в участке кода я пробегаюсь по контролам последовательно, доставая их свойста и передавая их в функцию RefreshExcelWorkbook(@ctr2.textBoxFileDirName.Text, txtTextName, txtNewName);

но этот сепсок у меня большой, и хотелось бы как-то распаралелить, т.е. обращаться к этой функции сразу нескольким контролам, как мне лучше это сделать ?

Код: Выделить всё
foreach (Control control in flowLayoutPanel1.Controls)
                {
                    /*Если есть пользовательский контрол, то достаю св-ва
                    и если нет галки "Новое имя", то беру из textBoxFileNewName, иначе пусто
                    */
                    UserControlFile ctr2 = control as UserControlFile;
                    if (ctr2 != null)
                    {
                        FileInfo fileinfo = new FileInfo(ctr2.textBoxFileDirName.Text);
                        FileDir = fileinfo.DirectoryName;
                       
                        if (ctr2.checkBoxNewName.Checked == true)
                        {
                            txtNewName = ctr2.textBoxFileNewName.Text;
                            txtTextName = "";
                        }
                        else
                        {
                            txtTextName = fileinfo.Name;
                            txtNewName = "";
                        }
                        //MessageBox.Show(txtTextName+txtNewName);
                        /*
                         Передаю фоновому поток функцию обновления с параметрами
                         workbookPath - полный путь без имени файла
                         txtNewName - новое имя, если есть
                         */

                       RefreshExcelWorkbook(@ctr2.textBoxFileDirName.Text, txtTextName, txtNewName);


                        /*
                         Если нет галки "Новое имя", то не архивируем
                         иначе запускаем функцию архивирования файла
                         */

                        if (txtTextName != "")
                        {
                            funcPackFile(txtTextName);
                        }
                        else
                        {
                            funcPackFile(txtNewName);
                        }
                    }
                }


у меня пока мозг направлен в сторону делегатов, но я к сожаленью плохо понял как это сделать или есть другой способ ???
Я не волшебник, я просто учусь.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Как вызвать функцию одновременно много раз ?

Сообщение FireFenix » 27.08.2010 (Пт) 19:41

Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Re: Как вызвать функцию одновременно много раз ?

Сообщение dmitriy22 » 30.08.2010 (Пн) 9:16

а можно на примере ? для моего случая
Я не волшебник, я просто учусь.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Как вызвать функцию одновременно много раз ?

Сообщение FireFenix » 30.08.2010 (Пн) 12:40

Код: Выделить всё
foreach (Control control in flowLayoutPanel1.Controls)
{
    Thread t = new Thread(new ThreadStart(ababa));
    t.IsBackground = true;
    t.Start(control); //неявное преобразование Control -> Object -> Control
}

public void ababa(Control control)
{
  //обработка контрола из коллекции
}
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Как вызвать функцию одновременно много раз ?

Сообщение FaKk2 » 05.10.2010 (Вт) 21:13

Крайне рекомендую прочитать книжку по мультитредингу в C#.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.


Вернуться в C#

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27

    TopList