Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Заблокирован
.NET 4.x

Создание нескольких потоков

17.09.2015, 23:59. Показов 1066. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сделать что было много потоков, я не совсем понимаю как это?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2015, 23:59
Ответы с готовыми решениями:

Отобразить ход нескольких потоков в нескольких ProgressBar
Возник вопрос как прикрепить ProgressBar к потокам, к примеру 100 потоков, нужно, чтобы ProgressBar правильно изменялся. Заранее спасибо

Доступ к контролу из нескольких потоков
Всем привет! Если создать 2 потока и дать им работу с выводом информации в richTextBox, то выскочит ошибка: Дополнительные сведения:...

Рисование на форме из нескольких потоков с двойной буферизацией, возможно ли?
Учебное задание, несколько потоков, каждый считает траекторию своей геом. фигуры и рисует ее на форме. Никак не могу сообразить, как...

19
19 / 5 / 3
Регистрация: 17.09.2015
Сообщений: 18
18.09.2015, 06:08
Смотри в сторону Tasks, Thread или BackgroundWorker
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
18.09.2015, 11:35
https://www.cyberforum.ru/atta... 1440418457
0
Заблокирован
18.09.2015, 13:04  [ТС]
demon91rf, Woldemar89,
вот к примеру если мне тасо реализовать 10 поток по перебору цифр и все ето надо чтобы было бы в текстбоксе( пока в голове не представляю как ето быдет ныглядить..), 1)0-9,2)00-99,3)000-999 итд.

Добавлено через 44 секунды
но чтобы все шли одновременно)
0
19 / 5 / 3
Регистрация: 17.09.2015
Сообщений: 18
18.09.2015, 13:22
lodret, так как интерфейс формы обрабатывается отдельным потоком, то нужно будет реализовывать межпоточное взаимодействия.
Например, пишешь делегат и функцию для обновления интерфейса.
C#
1
2
3
4
5
6
7
8
// Делегат.
private delegate void UpdateUIDelegate (string text);
 
// Функция обновления интерфейса.
private void UpdateUI(string text)
{
   textBoxLog.Text+=text+Environment.NewLine;
}
Пишешь задачу:
C#
1
2
3
4
5
6
7
8
Task.Factory.StartNew(
   ()=>
   {
      for (int i=0; i<10; i++)
      {
         textBoxLog.Invoke(new UpdateUIDelegate(UpdateUI), i.ToString());
      }
   });
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
18.09.2015, 13:28
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
        private void button1_Click(object sender, EventArgs e)
        {
            new Thread(() =>
            {
 
            for (int i = 0; i < 10; i++) { Thread.Sleep(1000); AddText(textBox1, i.ToString() + Environment.NewLine); }
 
            }).Start();
 
            new Thread(() =>
            {
 
            for (int i = 0; i < 100; i++) { Thread.Sleep(100); AddText(textBox2, i.ToString().PadLeft(2, '0') + Environment.NewLine); } 
 
            }).Start();
 
            new Thread(() =>
            {
 
            for (int i = 0; i < 1000; i++) { Thread.Sleep(10); AddText(textBox3, i.ToString().PadLeft(3, '0') + Environment.NewLine); } 
 
            }).Start();
 
 
 
 
 
        }
 
        private delegate void AddTextDelegate(object _control, object _text);                    
 
        private void AddText(object _control, object _text)                                     
        {
 
 
 
            Control out_Control = (Control)_control;
 
            string text = (string)_text;
 
            if (out_Control.InvokeRequired)                                                   
            {
                AddTextDelegate theDelegate = new AddTextDelegate(AddText);                 
                out_Control.Invoke(theDelegate, new object[] { out_Control, text });          
 
            }
            else
            {
                out_Control.Text += text;                                                    
            }
 
 
        }
Добавлено через 2 минуты
Хочешь разбей на больше потоков, просто правильно раздай диапазоны
и контролы для добавления, а также синхронизируй правильно.
0
19 / 5 / 3
Регистрация: 17.09.2015
Сообщений: 18
18.09.2015, 13:36
Woldemar89, вопрос в тему. А textbox не придётся ли блокировать? Ведь могут быть конфликты при обращение нескольких потоков. Например с помощью lock.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
18.09.2015, 13:41
Цитата Сообщение от demon91rf Посмотреть сообщение
А textbox не придётся ли блокировать?
Thread.Sleep() - даст время на переключение к другому потоку. Ну если Thread.Sleep() не использовать,
то да, наверное, придется использовать lock или семафоры.
0
19 / 5 / 3
Регистрация: 17.09.2015
Сообщений: 18
18.09.2015, 13:45
Woldemar89, в плане быстродействия, мне кажется, блокировка будет работать быстрее. Но это надо проверять = )
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
18.09.2015, 13:52
Цитата Сообщение от demon91rf Посмотреть сообщение
мне кажется, блокировка будет работать быстрее. Но это надо проверять = )
Согласен, наверняка.

Добавлено через 56 секунд
Хотя при постоянном многократном обращении к контролам формы, о быстродействии можно забыть, я думаю.

Добавлено через 1 минуту
Для ускорения можно не использовать "вывод данных реалтайм", а также можно побаловаться с
PLINQ и работа с PFX
0
Заблокирован
18.09.2015, 18:22  [ТС]
я понял то что я ничего не понял!
у меня есть ток такой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
string literals = "0123456789";
        public string ConvertFrom(BigInteger num)
        {
            char[] buffer = new char[num == 0 ? 1 : (int)(BigInteger.Log(num, literals.Length) + 1)];
            int i = buffer.Length - 1;
            do
            {
                buffer[i--] = literals[(int)(num % literals.Length)];
                num /= literals.Length;
            }
            while (num > 0);
            return new string(buffer);
        }
        public IEnumerable<string> Generate(int length)
        {
            var min = BigInteger.Parse("0");
            var max = BigInteger.Parse("1000000");
            for (BigInteger i = min; i < max; i++)
                yield return ConvertFrom(i).PadLeft(length, literals[0]);
        }
 
        private async void button1_Click(object sender, EventArgs e)
        {
            textBox6.Text = Clipboard.GetText();
            int k = 10;
            IEnumerable<string> gen = new List<string>();
            gen = Generate(k);
            foreach (var items in gen)
            {
                    await Task.Delay(1);
                    textBox4.Text = items;
}
}
Добавлено через 1 минуту
и че куда добавлять

Добавлено через 1 час 7 минут
вот можно ли сделать чтобы их было много:
C#
1
2
3
4
5
6
7
public IEnumerable<string> Generate(int length)
        {
            var min = BigInteger.Parse("0");
            var max = BigInteger.Parse("10");
            for (BigInteger i = min; i < max; i++)
                yield return ConvertFrom(i).PadLeft(length, literals[0]);
        }
то есть
C#
1
2
3
4
5
6
7
public IEnumerable<string> Generate(int length)
        {
            var min1 = BigInteger.Parse("10");
            var max1 = BigInteger.Parse("20");
            for (BigInteger i = min1; i < max1; i++)
                yield return ConvertFrom(i).PadLeft(length, literals[0]);
        }
C#
1
2
3
4
5
6
7
public IEnumerable<string> Generate(int length)
        {
            var min2 = BigInteger.Parse("20");
            var max2 = BigInteger.Parse("30");
            for (BigInteger i = min1; i < max1; i++)
                yield return ConvertFrom(i).PadLeft(length, literals[0]);
        }
?
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
18.09.2015, 23:20
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Для ускорения можно не использовать "вывод данных реалтайм", а также можно побаловаться с
PLINQ и работа с PFX
Я это зачем писал по твоему? Распараллель IEnumerable.
0
Заблокирован
18.09.2015, 23:35  [ТС]
Woldemar89, ты можешь написать код? Да, было бы не плохо если бы потоки шли параллельно, но к сожалению ниче в этом не понимаю
Мне также важно видеть как они отображаются в текстбоксах
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
18.09.2015, 23:39
Цитата Сообщение от lodret Посмотреть сообщение
ты можешь написать код?
Во первых, код я уже писал, во вторых, почитав
PLINQ и работа с PFX
вполне можно понять, как выполнить параллельный запрос к public IEnumerable<string> Generate;

Цитата Сообщение от lodret Посмотреть сообщение
я понял то что я ничего не понял!
Если я тебе напишу код, ты поймешь? Не думаю. Тогда какой смысл мне напрягаться, если ты ничего не поймешь? ртфм короче.
0
Заблокирован
18.09.2015, 23:58  [ТС]
Woldemar89, ниче уже

Добавлено через 10 минут
Woldemar89, можешь написать код который отображает прогресс textbox1 до 6 цифры после запятой? Или как-там он пишется....
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
19.09.2015, 00:05
Цитата Сообщение от lodret Посмотреть сообщение
код который отображает прогресс textbox1 до 6 цифры после запятой?
Задай i как double, и прибавляй 0,000001. Ну или типа того, я не очень то понял смысл.
0
Заблокирован
19.09.2015, 00:09  [ТС]
Woldemar89, то есть вот идет поток 1 который отображается в textbox1 допустим. Ну вот aaa aab aac то есть прогресс начинает свое движение, 0.0026 потом 0.0052 ну показывает на сколько уже прошел поток, как еще обьяснить...?
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
19.09.2015, 00:12
Цитата Сообщение от lodret Посмотреть сообщение
Ну вот aaa aab aac то есть прогресс начинает свое движение, 0.0026 потом 0.0052
aaa aab aac как связано с 0.0026 потом 0.0052?
0
Заблокирован
19.09.2015, 00:16  [ТС]
Woldemar89, да блин, если ты так не понимаешь то вот еще пример, идут буквы от a до z их 26(елси я не ошибаюсь) прошла букву a, прогресс бар заполнился на эту букву a. Прошли буквы b и c, прогресс бар заполнился снова т.к. b и c уже прошли.........
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
19.09.2015, 00:42
Если твоей задачей является "разобраться в потоках", то тебе ответили кодом.
Если у тебя есть конкретная задача - создай тему и вопрос, я никак не могу понять,
что конкретно тебе нужно? Ты что реализуешь, какой алгоритм?
Ты занимаешься пустым делом. Не морочь голову ни себе, ни другим.

Добавлено через 17 минут
Цитата Сообщение от lodret Посмотреть сообщение
вот еще пример, идут буквы от a до z их 26(елси я не ошибаюсь) прошла букву a, прогресс бар заполнился на эту букву a.
Куда ты лезешь? В какую степь? Формулируй нормально вопрос и не насилуй мозги.

Как надо задавать вопрос:

Требуется сформировать массив char[], (размерностью 26), содержащий символы английского алфавита, используя потоки.
Без потоков, использую следующий код:
C#
1
IEnumerable<char> GenerateAlphabet() //дальше блабла бла
Требуется выполнить генерацию параллельно в нескольких потоках. И отобразить процент выполнения
в ProgressBar. Подскажите как.

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

Добавлено через 6 минут
Короче, не сношайся больше с моими мозгами. Ты сам не знаешь, чего хочешь.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2015, 00:42
Помогаю со студенческими работами здесь

Отображение общего прогресса работы нескольких потоков на одном progressbar
В программе параллельно работают три потока, каждый из которых выполняет одинаковый объем работы, но время выполнения может отличаться. мне...

Асинхронная запись в файл из нескольких потоков
Ниже код вызывает крит. ошибку, так как 2 и более потоков, пытаются записать в файл. Метод Write нужен асинхронный. 3 потока...

Корректная работа нескольких потоков одновременно
Дорогие пользователи возникла проблема... Мне нужно запустить програму-чекер в многопотоке... Но как там много идёт время выполнения...

Корректировка работы нескольких потоков с одним циклом
Привет. Ребята, нужна ваша помощь. Не могу распаралелить поток. namespace potok { public partial class Form1 : Form { ...

Можно ли выполнять параллельно запись с нескольких потоков в ConcurrentQueue?
Всем добрый день. Подскажите пожалуйста, можно ли выполнять параллельно запись с нескольких потоков в ConcurrentQueue. Написал код простой...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru