Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
1 / 1 / 3
Регистрация: 23.08.2010
Сообщений: 46

Распараллеливание. Потоки.

21.10.2010, 09:24. Показов 5496. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция:
C#
1
2
3
4
private void ExecuteProgram(string filename)
        {
            blablabla
        }
Есть событие, по которому вызывается вышеописанная функция:
C#
1
2
3
4
5
private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            filename = alalalala...
            ExecuteProgram(filename);
        }
Всё отлично работает.
Хочу включить выполнение этой функции в поток.
Пытаюсь так:
C#
1
2
3
4
5
6
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.T hreading.ThreadStart)' has some invalid arguments
Error 2 Argument '1': cannot convert from 'void' to 'System.Threading.ThreadStart'

До этого переделал функцию, сделал ее без входящих данных, всё работает, но:
Вопрос: как впихнуть функцию с входящими данными в поток?
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.10.2010, 09:24
Ответы с готовыми решениями:

Байтовые потоки и потоки символов
Объясните, пожалуйста подробно что имелось ввиду На самом низком уровне все операции ввода/вывода в С# оперируют байтами. Подобный...

Распараллеливание
Уважаемые формумчане! Подскажите, кто-нибудь, пожалуйста, в чем тут может быть ошибка? using System; using...

Распараллеливание метода
Пытаюсь распаралелить добавление эдементов в ListView, так как обработка больших файлов занимает довольно много времени. Но поскольку в С#...

7
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
21.10.2010, 10:12
C#
1
private void ExecuteProgram(object filename){}
0
1 / 1 / 3
Регистрация: 23.08.2010
Сообщений: 46
21.10.2010, 10:17  [ТС]
C#
1
private void ExecuteProgram(object filename)
C#
1
2
Thread th = new Thread(ExecuteProgram(filename));
            th.Start();
Такие же ошибки.
Не подошло.
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
21.10.2010, 10:42
Цитата Сообщение от eon Посмотреть сообщение
Такие же ошибки.
Не подошло.

Ну хоть изредка то подключать свой процессор то надо. ))))
Думайте... рещение - в небольшом изменении
C#
1
2
Thread th = new Thread(ExecuteProgram(filename));
th.Start();
Прочитайте что такое делеагт в msdn - может поймете ошибку
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
21.10.2010, 10:49
Цитата Сообщение от eon Посмотреть сообщение
Thread th = new Thread(ExecuteProgram(filename)); th.Start();
Я не пишу на решетчатом, но даже мне понятно, что в скобках после Thread - параметр и это должно быть не возвращённое значение функции ExecuteProgram, а её адрес.
C#
1
Thread th = new Thread(ExecuteProgram);
передаст именно адрес, но Thread должен запустить функцию по этому адресу, а туда требуется передать ещё один параметр. Где его взять?
C#
1
Thread th = new Thread(ExecuteProgram(filename));
может передать только значение функции ExecuteProgram, а где её запускать в потоке? Отсюда вывод - нужны или два параметра: адрес функции ExecuteProgram и её параметр, или параметр th.Start, в котором будет передаваться параметр ExecuteProgram.
0
1 / 1 / 3
Регистрация: 23.08.2010
Сообщений: 46
21.10.2010, 11:05  [ТС]
Можно вот так:
Thread t = new Thread(delegate(){ ExecuteProgram(filename); });

Или так:
ThreadPool.QueueUserWorkItem((o) => this.ExecuteProgram("filename"));

Оба способа работают. Кто-нибудь скажет, в чем разница?

Добавлено через 1 минуту
Проблема решена.
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
21.10.2010, 11:31
Цитата Сообщение от eon Посмотреть сообщение
Можно вот так:
Thread t = new Thread(delegate(){ ExecuteProgram(filename); });

Или так:
ThreadPool.QueueUserWorkItem((o) => this.ExecuteProgram("filename"));

Оба способа работают. Кто-нибудь скажет, в чем разница?

Добавлено через 1 минуту
Проблема решена.
Правильно вообще-то так
C#
1
2
Thread th = new Thread(ExecuteProgram);
th.Start(filename);
Но Thread t = new Thread(delegate(){ ExecuteProgram(filename); }); тоже сойдет. Хотя и вызовет лишнюю адресацию.

ThreadPool - потоковый пул, смысл которого в том, что как только поток №(1) закончил работу запускается поток №(N+1) из пула.
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
21.10.2010, 13:02
Надо так

C#
1
2
3
4
5
6
7
8
private void ExecuteProgram(object param)
{
            string filename=param.ToString();
            blablabla
}
 
Thread th = new Thread(ExecuteProgram);
th.Start(filename);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.10.2010, 13:02
Помогаю со студенческими работами здесь

Распараллеливание вычислений
Здравствуйте! Есть симулятор клеточного автомата. "Поле действий" - двухмерный массив класса Cell. Эти клетки имеют кучу параметров, а...

Распараллеливание цикла
for (int i = 0; i < 30; i++) { db.cdb.RefreshConnection(); res...

Распараллеливание вычислений
Доброго времени форумчане. Может кто-нибудь подсказать по классу Parallel из TPL. Я создал вычисление интеграла Sin(x) от 0 до Пи,...

Распараллеливание foreach
Доброго времени суток! Возник такой вопрос: хочу распараллелить foreach: foreach (var group in partition) ...

Распараллеливание процессов
Было дано задание посчитать сумму вещественных чисел в какой-то последовательности. Только сделать это надо распараллелив выполнение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru