Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
KinDer015
2 / 2 / 2
Регистрация: 18.07.2013
Сообщений: 118
1

Баг или фича ? =)

24.01.2018, 12:48. Просмотров 774. Ответов 6

C#
1
2
3
4
5
6
7
8
9
10
11
12
Thread[] threads = new Thread[2];
 
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new Thread(delegate ()
                {
                    Console.Write(i); // result 1 2
                });
                threads[i].Start();
 
                Console.Write(i); // result 0 1
            }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2018, 12:48
Ответы с готовыми решениями:

Баг или нет
Функции char.IsDigit(); char.IsNumber(); работают идентично в VS2012 и не реагируют на...

Запятая между атрибутами. Баг VS, или я туплю?
public decimal VAT_amount { get; set; } и , Column(&quot;VAT_amount&quot;)] public decimal VT_aount...

Рисование эллипса на странице. Баг System.Drawing или мой?
Короче говоря, первый раз сталкиваюсь с таким, этот баг или моя ошибка стопорит меня, замечу, что...

Баг или я дурак =)
Подскажите что делаю не так. в классе Base создаю объект класса Pacinet. Создается ошибок...

Баг или нет? HttpWebResponse
Всем привет, столкнулся с такой непонятной вещью: HttpWebResponse вернул некачественный ответ. var...

6
Cupko
463 / 452 / 127
Регистрация: 17.07.2012
Сообщений: 1,345
Записей в блоге: 1
Завершенные тесты: 2
24.01.2018, 12:56 2
KinDer015, замыкание
1
KinDer015
2 / 2 / 2
Регистрация: 18.07.2013
Сообщений: 118
24.01.2018, 13:00  [ТС] 3
Выходит фича xD, спасибо за ответ
0
kolorotur
Эксперт .NET
11203 / 9126 / 2303
Регистрация: 17.09.2011
Сообщений: 15,675
Завершенные тесты: 1
24.01.2018, 13:04 4
Лучший ответ Сообщение было отмечено KinDer015 как решение

Решение

KinDer015, разворачивая сказанное выше: локальная переменная i захватывается делегатом. В консоль из этого делегата будет выведено значение на момент выполнения, а не на момент захвата.
Если в делегат перед выводом добавить задержку Thread.Sleep(1000), то вывод будет 22, потому что к тому моменту цикл давно завершится и значение i будет равно двум.
1
KinDer015
2 / 2 / 2
Регистрация: 18.07.2013
Сообщений: 118
24.01.2018, 13:34  [ТС] 5
Выходит проблема серьезней чем я думал, то есть в данной конструкции не возможно избавится от этого явления? (в переменной i предположим передаю id потока)
0
Cupko
463 / 452 / 127
Регистрация: 17.07.2012
Сообщений: 1,345
Записей в блоге: 1
Завершенные тесты: 2
24.01.2018, 13:36 6
Цитата Сообщение от KinDer015 Посмотреть сообщение
Выходит проблема серьезней чем я думал, то есть в данной конструкции не возможно избавится от этого явления? (в переменной i предположим передаю id потока)
можно, создать переменнную внутри цикла, и сохранять значение в ней:
C#
1
2
3
4
5
6
7
8
            for (int i = 0; i < threads.Length; i++)
            {
                var copy = i;
                threads[i] = new Thread(delegate ()
                {
                    Console.Write(copy);
                });
            }
1
KinDer015
2 / 2 / 2
Регистрация: 18.07.2013
Сообщений: 118
24.01.2018, 13:43  [ТС] 7
Спасибо!
(проблема решена, тему можно закрыть)
0
24.01.2018, 13:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2018, 13:43

Странный баг или я что то не понимаю
Добрый вечер / день. Столкнулся в непонятным, только с утра всё отлично компилировало код. ...

Работа с webBrowser баг, или ошибка?
Всем здрасте. Вообщем суть заключается в том, что я пытаюсь кликать кнопки используя определения...

Баг или фича
решил проверить на своем VS 2008 присвоение в сравнении написал char buf; char *buf1;...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru