Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325

Есть ли разница между способами создания Thread?

15.01.2017, 13:29. Показов 1990. Ответов 10

Студворк — интернет-сервис помощи студентам
Тевирп
будет ли разница
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        // Метод, который планируется выполнять в отдельном потоке.
        static void Method()
        {
            while (true)
            {
                Console.WriteLine(new string(' ', 10) + "Secondary Thread");
            }
        }
 static void Main()
        {
            ThreadStart method = new ThreadStart(Method);
            Thread thread = new Thread(method);
            thread.Start();
}
или так
C#
1
2
3
4
5
6
 static void Main()
        {
           // ThreadStart method = new ThreadStart(Method);
            Thread thread = new Thread(Method);
            thread.Start();
}
Добавлено через 5 минут
разницы в выполнении не вижу, походу её и нет
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2017, 13:29
Ответы с готовыми решениями:

В чем разница между 2 способами создания строки?
Создание строки из составных частей, посредством сложения или через String.Format 1. Какой вариант вы используете? 2. Есть ли...

Разница между Task и Thread
в чем разница между задачей и потоком? и то то делает все асинхронно

В чем разница между Task и Thread?
В чем разница между Task и Thread и когда что лучше использовать? Если для написания сервера который будет одновременно отправлять 20...

10
Эксперт .NET
 Аватар для Usaga
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,337
15.01.2017, 13:34
UseMuse, разницы нет. ThreadStart - делегат, чисто для удобства ("задачи" для исполнения можно в массиве хранить, или, там, как аргумент в метод передать).
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.01.2017, 13:45
Цитата Сообщение от UseMuse Посмотреть сообщение
будет ли разница
Разница будет, если вы добавите перегрузку метода Method с параметром object.
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
16.01.2017, 09:42  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Разница будет, если вы добавите перегрузку метода Method с параметром object.
Можно пример пжлст, если не сложно
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.01.2017, 10:03
UseMuse, создайте такой метод в дополнение к существующему:
C#
1
2
3
static void Method(object o)
{
}
И попробуйте оба варианта.
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
16.01.2017, 12:26  [ТС]
kolorotur, так для того, чтобы метод - принимающий параметр запустить в отдельный поток, нужно использовать делегат ParameterizedThreadStart.
Делегат ThreadStart для метода с параметром не подойдёт.


Но так же можно запустить поток и таким образом
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    static void Method(object o)
    {
        while (true)
        {
            Console.WriteLine(new string(' ', 10) + "Secondary Thread");
        }
    }
    static void Main()
    {
       object s = null;
        //ParameterizedThreadStart method = new ParameterizedThreadStart(Method);
        Thread thread = new Thread(Method);
        thread.Start(s);
    }
Тогда вопрос, есть ли разница между запуском потока
C#
1
2
3
4
       object s = null;
        //ParameterizedThreadStart method = new ParameterizedThreadStart(Method);
        Thread thread = new Thread(Method);
        thread.Start(s);
или так
C#
1
2
3
4
        object s = null;
        ParameterizedThreadStart method = new ParameterizedThreadStart(Method);
        Thread thread = new Thread(method);
        thread.Start(s);
где Method
C#
1
2
3
4
5
6
7
    static void Method(object o)
    {
        while (true)
        {
            Console.WriteLine(new string(' ', 10) + "Secondary Thread");
        }
    }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.01.2017, 12:34
Лучший ответ Сообщение было отмечено UseMuse как решение

Решение

UseMuse, ну я же выше написал:
Цитата Сообщение от kolorotur Посмотреть сообщение
создайте такой метод в дополнение к существующему
В дополнение к существующему.
Не заменить существующий метод новым, а добавить еще один метод с тем же именем, но с параметром типа object.
Чтобы было два метода.

А потом попробовать оба варианта из первого сообщения, без изменений.
Вот в этом и будет разница.
1
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
16.01.2017, 12:44  [ТС]
kolorotur, ошибка на при компиляции, так как не понятно компилятору, какой метод использовать. Спасибо
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Method(object o)
    {
        while (true)
        {
            Console.WriteLine(new string(' ', 10) + "Secondary Thread");
        }
    }
    static void Method()
    {
        while (true)
        {
            Console.WriteLine(new string(' ', 10) + "Secondary Thread");
        }
    }
    static void Main()
    {
        object s = null;
        //ThreadStart  method = new ThreadStart(Method);
        Thread thread = new Thread(Method);// ошибка при компиляции, так как не понятно компилятору, какой метод использовать
        thread.Start();
    }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.01.2017, 12:54
Цитата Сообщение от UseMuse Посмотреть сообщение
ошибка на при компиляции, так как не понятно компилятору, какой метод использовать.
Совершенно верно — в этом и есть разница.
Если вы создаете делегат явно, то компилятору надо лишь подобрать соответствующую перегрузку конструктора Thread.
Если вы передаете в конструктор имя метода, то перед тем, как определить нужную перегрузку конструктора, компилятору нужно сначала определить подходящий тип делегата (делегат создается за вас компилятором), который определяется по наиболее подходящей сигнатуре одной из перегрузок метода.
В данном случае у компилятора получается две лучших перегрузки (алгоритм определения лучшей перегрузки в деталях описан в спеках языка), т.к. нет никаких причин считать один вариант лучше другого, что и приводит к ошибке.

Получается, что явное создание делегата нужно использовать тогда, когда существует несколько конфликтующих перегрузок метода. Если таковых не имеется, то можно просто использовать имя метода и предоставить компилятору самому подобрать подходящий тип делегата.
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
16.01.2017, 12:59  [ТС]
При использовании делегата, ошибки не будет, так как делегат содержит в себе адрес метода
C#
1
2
3
        ThreadStart  method = new ThreadStart(Method);
        Thread thread = new Thread(method );// profit 
        thread.Start();
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.01.2017, 13:15
Цитата Сообщение от UseMuse Посмотреть сообщение
При использовании делегата, ошибки не будет
Верно, о чем выше и написано

Цитата Сообщение от UseMuse Посмотреть сообщение
так как делегат содержит в себе адрес метода
Только не поэтому, а потому что компилятору нет надобности самому подбирать тип подходящего делегата — вы это сделали за него.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2017, 13:15
Помогаю со студенческими работами здесь

Есть ли разница между книгами Троелсена C# 5.0 и 6.0?
Или вообще желательно прочитать все книги? и что значит "выучить язык"? сколько % языка нужно знать, что бы смело говорить "я знаю...

Есть ли логическая разница между а = 1 или а = true?
Здравствуйте! Есть ли логическая разница между, если а = 1 или а = true: а = 1 а = а а = true

Есть ли разница между двумя маленькой разницей программы?
Два варианта программы, результат компиляции программы одинаковый, доказательство на двух скриншотов, есть ли смысл делать как на 1-ом...

Разница между ниже приведенными способами маштабирования картинки
есть ли какая нибудь разница между ниже приведенными способами маштабирования картинки? .one-project-thumb > div { width:...

В чём разница между способами добавления изображений в Tkinter
Начала изучать Tkinter, питон 3й версии. Задача: Добавить на фон окна изображение. Не могу найти информацию о том как делать это...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru