Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распараллеливание. Потоки. Распараллеливание. Потоки. 
:(
    Опции темы
eon
Дата 21.10.2010, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Есть функция:
Код

private void ExecuteProgram(string filename)
        {
            blablabla
        }
    

Есть событие, по которому вызывается вышеописанная функция:
Код

private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            filename = alalalala...
            ExecuteProgram(filename);
        }

    

Всё отлично работает.
Хочу включить выполнение этой функции в поток.
Пытаюсь так:
Код

private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            filename = alalalala...
            Thread th = new Thread(ExecuteProgram(filename));
            th.Start();
        }

    
Ошибки:
Error 1 The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.ThreadStart)' has some invalid arguments
Error 2 Argument '1': cannot convert from 'void' to 'System.Threading.ThreadStart'

До этого переделал функцию, сделал ее без входящих данных, всё работает, но:
Вопрос: как впихнуть функцию с входящими данными в поток?
Спасибо.
PM MAIL   Вверх
diadiavova
Дата 21.10.2010, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Код

private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            filename = alalalala...
            Thread th = new Thread(ExecuteProgram);
            th.Start();
        }




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
azesmcar
Дата 21.10.2010, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Код

ThreadPool.QueueUserWorkItem((o) => this.ExecuteProgram("filename"));


PM   Вверх
eon
Дата 21.10.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Цитата(diadiavova @ 21.10.2010,  09:22)
Код

private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            filename = alalalala...
            Thread th = new Thread(ExecuteProgram);
            th.Start();
        }


Если написать:

private void ExecuteProgram(string filename)

А поток:

Thread th = new Thread(ExecuteProgram);

то:

Error    1    The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.ThreadStart)' has some invalid arguments
Error    2    Argument '1': cannot convert from 'method group' to 'System.Threading.ThreadStart'

Добавлено через 8 минут и 59 секунд
Цитата(azesmcar @ 21.10.2010,  09:38)
Код

ThreadPool.QueueUserWorkItem((o) => this.ExecuteProgram("filename"));

Спасибо. То, что надо вроде.
PM MAIL   Вверх
eon
Дата 21.10.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Thread t = new Thread(delegate(){ ExecuteProgram(filename); });

так тоже работает
PM MAIL   Вверх
azesmcar
Дата 21.10.2010, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(eon @  21.10.2010,  10:02 Найти цитируемый пост)
Thread t = new Thread(delegate(){ ExecuteProgram(filename); });

так тоже работает 

Не стоит создавать потоки нарпямую, использую thread pool. Так намного эффективнее.
PM   Вверх
eon
Дата 21.10.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Цитата(azesmcar @ 21.10.2010,  10:03)
Цитата(eon @  21.10.2010,  10:02 Найти цитируемый пост)
Thread t = new Thread(delegate(){ ExecuteProgram(filename); });

так тоже работает 

Не стоит создавать потоки нарпямую, использую thread pool. Так намного эффективнее.

Спасибо за совет, я конечно маловато пока в этом осознал, но всё же - спасибо.
PM MAIL   Вверх
azesmcar
Дата 21.10.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(eon @  21.10.2010,  10:06 Найти цитируемый пост)
Спасибо за совет, я конечно маловато пока в этом осознал, но всё же - спасибо. 


Цитата(eon @  21.10.2010,  10:02 Найти цитируемый пост)
Thread t = new Thread(delegate(){ ExecuteProgram(filename); });

создает поток и запускает твою функцию, функция завершается, поток больше не нужен и удаляется.

Цитата(azesmcar @  21.10.2010,  09:38 Найти цитируемый пост)
ThreadPool.QueueUserWorkItem((o) => this.ExecuteProgram("filename"));

создает поток и запускает твою функцию, функция завершается и поток засыпает на некоторое время, пока ты не попросишь его снова что нибудь сделать или пока система не решит, что он больше не нужен (так как долго ничем не занят). Т.е. последующие асихнронные вызовы не будут заново создавать поток а используют уже существующий.
Там еще куча всяких ньюансов, всего не расскажешь так что просто используй thread pool, он умный. smile 

Это сообщение отредактировал(а) azesmcar - 21.10.2010, 10:14
PM   Вверх
diadiavova
Дата 21.10.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(eon @  21.10.2010,  10:40 Найти цитируемый пост)
Если написать:

private void ExecuteProgram(string filename)

А поток:

Thread th = new Thread(ExecuteProgram);

Извиняюсь, я имел в виду
Код

        private void ExecuteProgram(object filename)
        {
            //code
        }

    private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            var filename = "";
            var th = new Thread(ExecuteProgram);
            th.Start(filename);
        }




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0718 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.