powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск потока с использованием лямбда-выражений
2 сообщений из 2, страница 1 из 1
Запуск потока с использованием лямбда-выражений
    #38180643
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Уважаемые форумчане!
Изучаю многопоточное программирование в C#. Хотелось бы передавать данные в поток.
В литературе приводятся примеры с использованием делегата ParameterizedThreadStart. Такой подход позволяет передать в поток лишь один параметр типа object, плюс ко всему на МСДН заявляют, что такой подход не является безопасным относительно типов.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(new ParameterizedThreadStart(Do));
            thread1.Start(100);
        }

        public static void Do(object i)
        {
            Console.WriteLine("'{0}' done!", i);
        }


Если надо передать больше параметров, то в литературе рекомендуют создавать класс-обертку для них и передавать в качестве параметра его экземпляр.
Я попытался использовать для передачи параметров в поток лямбда-выражения (или делегат) таким образом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    class Program
    {
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(() => Do(6, "Hello"));
            thread1.Start();
        }

        public static void Do(int i, string s)
        {
            Console.WriteLine("'{0}, {1}' done!", i, s);
        }
    }


Такой подход позволяет передавать в поток нужные параметры без лишних классов.
Но меня волнует вопрос: нету ли в таком подходе подводных камней?

Спасибо.
...
Рейтинг: 0 / 0
Запуск потока с использованием лямбда-выражений
    #38181482
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Novichok,

смотрите http://msdn.microsoft.com/ru-ru/library/system.threading.threadstart(v=vs.100).aspx
Код: c#
1.
public delegate void ThreadStart()


то,что вы пишите это эквивалентно:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 static void Main(string[] args)
        {
            var thread1 = new Thread(Start);
            thread1.Start();

                Console.WriteLine("end");
                Console.ReadLine();
        }

        private static void Start()
        {
            Do(6, "");
        }

        public static void Do(int i, string s)
        {
            Console.WriteLine("'{0}, {1}' done!", i, s);
        }
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск потока с использованием лямбда-выражений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]