159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
|||||||||||
1 | |||||||||||
Есть ли разница между способами создания Thread?15.01.2017, 13:29. Показов 1780. Ответов 10
Тевирп
будет ли разница
разницы в выполнении не вижу, походу её и нет
0
|
15.01.2017, 13:29 | |
Ответы с готовыми решениями:
10
В чем разница между 2 способами создания строки? Разница между Task и Thread В чем разница между Task и Thread? Есть ли разница между книгами Троелсена C# 5.0 и 6.0? |
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
|
|
15.01.2017, 13:34 | 2 |
UseMuse, разницы нет. ThreadStart - делегат, чисто для удобства ("задачи" для исполнения можно в массиве хранить, или, там, как аргумент в метод передать).
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
15.01.2017, 13:45 | 3 |
0
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
|
16.01.2017, 09:42 [ТС] | 4 |
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
||||||
16.01.2017, 10:03 | 5 | |||||
UseMuse, создайте такой метод в дополнение к существующему:
0
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
|||||||||||||||||||||
16.01.2017, 12:26 [ТС] | 6 | ||||||||||||||||||||
kolorotur, так для того, чтобы метод - принимающий параметр запустить в отдельный поток, нужно использовать делегат ParameterizedThreadStart.
Делегат ThreadStart для метода с параметром не подойдёт. Но так же можно запустить поток и таким образом
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
16.01.2017, 12:34 | 7 |
Сообщение было отмечено UseMuse как решение
Решение
UseMuse, ну я же выше написал:
В дополнение к существующему. Не заменить существующий метод новым, а добавить еще один метод с тем же именем, но с параметром типа object. Чтобы было два метода. А потом попробовать оба варианта из первого сообщения, без изменений. Вот в этом и будет разница.
1
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
||||||
16.01.2017, 12:44 [ТС] | 8 | |||||
kolorotur, ошибка на при компиляции, так как не понятно компилятору, какой метод использовать. Спасибо
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
16.01.2017, 12:54 | 9 |
Совершенно верно — в этом и есть разница.
Если вы создаете делегат явно, то компилятору надо лишь подобрать соответствующую перегрузку конструктора Thread. Если вы передаете в конструктор имя метода, то перед тем, как определить нужную перегрузку конструктора, компилятору нужно сначала определить подходящий тип делегата (делегат создается за вас компилятором), который определяется по наиболее подходящей сигнатуре одной из перегрузок метода. В данном случае у компилятора получается две лучших перегрузки (алгоритм определения лучшей перегрузки в деталях описан в спеках языка), т.к. нет никаких причин считать один вариант лучше другого, что и приводит к ошибке. Получается, что явное создание делегата нужно использовать тогда, когда существует несколько конфликтующих перегрузок метода. Если таковых не имеется, то можно просто использовать имя метода и предоставить компилятору самому подобрать подходящий тип делегата.
0
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
||||||
16.01.2017, 12:59 [ТС] | 10 | |||||
При использовании делегата, ошибки не будет, так как делегат содержит в себе адрес метода
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
16.01.2017, 13:15 | 11 |
Верно, о чем выше и написано
Только не поэтому, а потому что компилятору нет надобности самому подбирать тип подходящего делегата — вы это сделали за него.
1
|
16.01.2017, 13:15 | |
16.01.2017, 13:15 | |
Помогаю со студенческими работами здесь
11
Есть ли логическая разница между а = 1 или а = true? Есть ли разница между двумя маленькой разницей программы? Разница между ниже приведенными способами маштабирования картинки В чём разница между способами добавления изображений в Tkinter Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |