Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818

Взаимодействие потоков и формы

28.05.2014, 16:24. Показов 4321. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я что-то смотрел читал и тдп. Так и не понял как можно реализовывать норм выполнение функций в других потоках что бы эта ***** форма не лагала...
Например может кто привести пример кода где форма, есть лабел,есть кнопка при нажатии на кнопку в отдельном потоке, что то решается(неважно) и возращается true при истине решения. и в лабел добавляется +1.
и все это быстро приисходит что бы число очень быстро в лабеле менялось например было 1 стало через секунды 2 2000(денамически а не бац и 2000 стало заместь 1) не пойму как форма не будет лагать. Если передавать и изменять переменую с другого потока нельзя. То поток основной формы будет постоянно занят изменением лабела, и будет лагать при передвижении формы....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2014, 16:24
Ответы с готовыми решениями:

Взаимодействие потоков и элементов управления
Подскажите, у меня есть два потока, в потоках работа ведется с listView, так вот, когда данных в listView становится например выше 100, я...

Взаимодействие формы и классов
Здравствуйте, у меня такая проблема, есть одна форма и отдельный класс. Хочу применить алгоритм Флойда для нахождения кратчайшего пути. ...

Взаимодействие 3 формы. 1 главная и 2 дочерних
Есть 1 главная форма, на ней две кнопки. Первая вызывает первую дочернюю форму, а вторая вторую. Со второй дочерней формы млжно будет...

22
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.05.2014, 16:32
Лучший ответ Сообщение было отмечено Lynatik001 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private void Form1_Load(object sender, EventArgs e)
        {
            Label lbl = new Label();
            int num = 0;
            lbl.Font = new Font(Form.DefaultFont.FontFamily, 72, FontStyle.Bold);
            lbl.AutoSize = true;
            this.Controls.Add(lbl);
 
            new Thread(() =>
            {
                while (num < int.MaxValue)
                {
                    num += 1;
                    lbl.Invoke(new Action(() => lbl.Text = num.ToString()));
                    Thread.Sleep(1);
                }
            }) { IsBackground = true }.Start();
        }
2
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
28.05.2014, 17:20  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
new Thread(() =>
* * * * * * {
* * * * * * * * while (num < int.MaxValue)
* * * * * * * * {
* * * * * * * * * * num += 1;
* * * * * * * * * * lbl.Invoke(new Action(() => lbl.Text = num.ToString()));
* * * * * * * * * * Thread.Sleep(1);
* * * * * * * * }
* * * * * * }) { IsBackground = true }.Start();
как то не очень понятно, невидел раньше такого вида обявления Thread , можешь росписать
вот именно ето еще не понятно
Цитата Сообщение от Spawn Посмотреть сообщение
=>
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
28.05.2014, 17:22
Цитата Сообщение от Lynatik001 Посмотреть сообщение
вот именно ето еще не понятно
Дерзай: >>ClicK Me<<
1
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
28.05.2014, 18:09  [ТС]
болие мение понятно, просто вставил туда анонимную функцию что бы не обявлять ее ибо она только один раз используется,
Цитата Сообщение от Spawn Посмотреть сообщение
new Action(
вот это еще не понятно)( что за функция
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
28.05.2014, 18:14
Цитата Сообщение от Lynatik001 Посмотреть сообщение
вот это еще не понятно
Дерзай: >>ClicK Me<<.
1
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.05.2014, 19:04
Цитата Сообщение от Lynatik001 Посмотреть сообщение
вот это еще не понятно)( что за функция
Делегат это
0
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
28.05.2014, 19:06  [ТС]
Жаль в 100 потоков подвисает форма с этим кодом.
а еще вопрос, можно ли примерчик кода только вот что бы без лямбда выражения, а в другом классе которая лежала функция вызивалась, интересно на такое исполнение посмотреть)
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.05.2014, 19:44
Lynatik001, лямбда в данном случае - синтаксический сахар, компилятор за Вас просто делает кучу грязной работы.
Цитата Сообщение от Lynatik001 Посмотреть сообщение
Жаль в 100 потоков подвисает форма с этим кодом.
Что угодно подвиснет, передышку-то надо давать основному потоку. Для таких скоростей опроса надо уходить на уровень драйверов скорее.
1
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
28.05.2014, 21:43  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
лямбда в данном случае - синтаксический сахар, компилятор за Вас просто делает кучу грязной работы.
а если я хочу что бы функция которая лежит в отдельном классе изменяла контрол лб1 формы...
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
using System;
using System.Windows.Forms;
using System.Threading;
namespace potoki
{
    public partial class Form1 : Form
    {
        private Thread[] Threads;
        private Potoks Fpotok = new Potoks();
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 10; i++)
            {
                
                Threads[i] = new Thread(Fpotok.method) { IsBackground = true };
                Threads[i].Start();
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Threads = new Thread[100];
        }
 
 
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
using System;
using System.Threading;
namespace potoki
{
    class Potoks : Form1
    {
        public void method()
        {
            lb1.Text = "sdsa"; // невидит
        }
    }
}
Или может я вообще логически не правильно делаю? Поправь меня, напрям на путь истеный ХД
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.05.2014, 21:54
Lynatik001, используйте события и
C#
1
this.Invoke((Action)delegate{//Тут делаем что-то });
1
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
30.05.2014, 19:52  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
используйте события
есть пару вопросов)

Цитата Сообщение от insite2012 Посмотреть сообщение
(Action)delegate{//Тут делаем что-то });
что обозначает delegate в данном контексте, анонимную функцию делегата?
нечем же не отличается от
C#
1
lbl.Invoke(new Action(() => lbl.Text = num.ToString()));
?
А еще вопрос, у меня тут есть некая зависимость, что бы взять переменные с основного, дочерний наследует основной по этому, но и есть нужда создавать обьект дочернего класса, что бы потом вызывать эту функцию
и выходит зацикленность. даже если событие делать всеровно надо создавать обьект класса, и записать в событие функции эти, и опять будет зацикленность) наверно нужно просто убрать наследование и передавать в конструктор данные.
а еще досихпор я не понимаю смысл события, ведь можно и просто как метод всеравно логика та же делается, если то то то , то вызивать то, единственная разница только в том что в событиее можно положить не 1 метод
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
30.05.2014, 19:56
Цитата Сообщение от Lynatik001 Посмотреть сообщение
нечем же не отличается от
В общем по использованию ничем не отличается.
По второму вопросу не очень понял, поподробнее расскажите.
1
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
30.05.2014, 20:09  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
В общем по использованию ничем не отличается.
По второму вопросу не очень понял, поподробнее расскажите.
та программа зациклилась ибо основной дочерний класс наследует основной, а потом в основном вызывается обьект этого класса-бесконечный цикл. - но это неважно решу это просто убиранием наследования, и передачей в обьект переменных что надо передать.
Есть вопрос такого вида
А еще досих пор я не понимаю смысл события, ведь можно и просто как метод всеравно логика та же делается, если то то то , то вызивать то, единственная разница только в том что в событиее можно положить не 1 метод

Добавлено через 4 минуты
Хотя я вообще не понимаю смысл существования событий, ведь в делегат тоже можно записать все эти функции и без его
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
30.05.2014, 20:22
Цитата Сообщение от Lynatik001 Посмотреть сообщение
А еще досих пор я не понимаю смысл события
Это плохо. По сути событие-это метод обратного вызова. То есть мы из вызывающего кода можем обратиться напрямую к методам (допустим) какого-то класса. А вот через событие возвращает нам сообщения из этого класса в определенном случае. И разница между методами тут огромная. Из класса мы, к примеру не можем обратиться к тем элементам другого класса (формы), о которых мы не знаем. А делать их паблик-не есть хорошо. Вот через события и идет все взаимодействие.

Добавлено через 2 минуты
Цитата Сообщение от Lynatik001 Посмотреть сообщение
Хотя я вообще не понимаю смысл существования событий, ведь в делегат тоже можно записать все эти функции и без его
))) Если быть совершенно точным, то событие и есть делегат. Это просто сокращение кода, только и всего. При использовании делегата есть определенные трудности, к примеру можно (случайно) сделать экземпляр делегата паблик, и тогда вызывающий код сможет сделать с ним все что угодно. Ну и придется определять методы подписки-отписки методов от экземпляра делегата, еще больше кода. А запись через событие сокращает все это написание.

Добавлено через 8 минут
Lynatik001, можете посмотреть через IlDasm, там видно, что событие разворачивается в несколько методов подключения и отключения обработчиков и экземпляр делегата (EventHandler, EventHandler<T>, Action...).
0
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
30.05.2014, 20:25  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Это плохо. По сути событие-это метод обратного вызова. То есть мы из вызывающего кода можем обратиться напрямую к методам (допустим) какого-то класса. А вот через событие возвращает нам сообщения из этого класса в определенном случае. И разница между методами тут огромная. Из класса мы, к примеру не можем обратиться к тем элементам другого класса (формы), о которых мы не знаем. А делать их паблик-не есть хорошо. Вот через события и идет все взаимодействие.
Да? вот Привиду пример я смотрел что такое "событьие" и смысл его и пример на http://habrahabr.ru/post/213809/ Если нельзя кидать внешние ссылки удалите а то не знаю ли можно.
по этому примеру, не какого тут чуда о клас видит другой клас через событие не вижу. Просто создается обьект класса и в событие записиваются методы через, обьект класса.метод
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
30.05.2014, 20:35
Цитата Сообщение от Lynatik001 Посмотреть сообщение
Привиду пример я смотрел что такое "событьие"
Жаль, что вы только смотрели... Могу посоветовать только одно-изучайте язык. Чудес действительно нет, все логично и понятно.
0
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
30.05.2014, 20:42  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Жаль, что вы только смотрели... Могу посоветовать только одно-изучайте язык. Чудес действительно нет, все логично и понятно.
ну смотрел и понял, ведь язык это только синтаксис и понятие как правильно использовать нужные методы.
тогда обясните смысл ведь и через обьект класса можно получить метод другого класса.
Можете навести пример где без события некак
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
30.05.2014, 20:48
Цитата Сообщение от Lynatik001 Посмотреть сообщение
тогда обясните смысл ведь и через обьект класса можно получить метод другого класса.
Как???
Ну вот вам пример. Есть класс А. И есть класс Б. В классе А объявлена переменная класса Б, и вызывается какой-то из его методов. Но класс Б ничего не знает про класс А, однако при выполнении какого-либо своего метода он должен сообщить вызывающему коду (в данном случае классу А, но это не принципиально, это может быть и класс В, Г, Д) о чем-то. Как это сделать, ведь класс Б ничего не знает о том, кто его вызвал, какие там есть методы, свойства и т.п. Вот как раз через событие это и делается.
0
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
30.05.2014, 20:58  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Как???
Ну вот вам пример. Есть класс А. И есть класс Б. В классе А объявлена переменная класса Б, и вызывается какой-то из его методов. Но класс Б ничего не знает про класс А, однако при выполнении какого-либо своего метода он должен сообщить вызывающему коду (в данном случае классу А, но это не принципиально, это может быть и класс В, Г, Д) о чем-то. Как это сделать, ведь класс Б ничего не знает о том, кто его вызвал, какие там есть методы, свойства и т.п. Вот как раз через событие это и делается.
пример можно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2014, 20:58
Помогаю со студенческими работами здесь

Взаимодействие дополнительного потока и формы
Собственно по ошибке начинал на Delphi. Делал многопоточные программы. Обращался к форме из потока методом Form1.Edit1.Text и засовывал...

Взаимодействие пользовательского элемента управления и формы
Здравствуйте, формучане. Эксперементировал с пользоватльскими элементами и возникли два вопроса: 1. Создал пользовательский элемент на...

Завершение потоков, после закрытия формы
После закрытия формы в процессах продолжает висеть процесс. Я так понимаю вот этот поток не закрывается. //принятие данных...

Завершение потоков при закрытии формы
Я щелкаю на закрыть окно, а программа не выходит из Debug. Я понял, что я запускаю потоки, но не выхожу из них. То есть надо после старта...

Изменение информации в элементах формы из потоков
в заголовке слово &quot;проблема&quot; заменено на &quot;искусство&quot;, так как первое является запрещённым. о_О int a; #pragma endregion private:...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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