Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
4 / 4 / 2
Регистрация: 12.09.2013
Сообщений: 73

Обращение к элементам формы из другого файла проекта

30.12.2017, 17:19. Показов 6700. Ответов 25
Метки нет (Все метки)

Всех с наступающим.
Есть проект, работать в котором стало не особо удобно по причине большого количества кода. Часть кода хочется перенести в другой файл .cs.
Возникает следующая проблема. При попытке вывести текст в элементе формы:

C#
1
BeginInvoke((Action)(() => label0.Text = "Я тут"));
оказывается, что и BeginInvoke, и label0 не существуют в текущем контексте. Как решается данный вопрос по-человечески?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.12.2017, 17:19
Ответы с готовыми решениями:

Обращение к элементам формы из другого потока
Короче говоря многопоточность это моя слабость. Сколько статей перечитал уже, один хрен не пойму как они синхронизируются и как...

Обращение к элементам формы из другого потока
Извиняйте за очередную тему. Тут на форуме я уже их много прочитал, но все равно не могу понять эти делегаты и инвок. На форуме есть...

Обращение к элементам формы из другого pas файла
Подскажите как обратиться к элементу формы например Combobox1 из другого файла без "Form1.Combobox" а чисто напрямую ComboBox1.

25
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
17.01.2018, 15:00
Цитата Сообщение от hoolygan Посмотреть сообщение
у я же сделал безо всяких invoke(), и прекрасно меняется значение внутри таски, и GUI отображает.
так в примере таск ретернит в GUI thread.
C#
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < 10; i++)
            {
                //присваивание в гуи треде
                NumOfActivities = await Task.Run(() =>
                {
                    Thread.Sleep(500);
                    return i + 1;
 
                }); 
            }
это не "меняется внутри таска". Я привел пример кода, который кидает эксепшн. Вот не знаю как его рабочим сделать не возвращая логику к вашему примеру.
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
17.01.2018, 17:35
КОП, Вы в любом случае должны будете вернуться в главный поток. Тогда нужно переделывать логику вызова метода. Вот измененный кусок
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public Task CalculateActivities(SetStartEnable buttonSet)
        {
 
            return
               Task.Run(() =>
                {
                    for (int i = 0; i < 5; i++)
                    {
                        Thread.Sleep(500);
                        NumOfActivities = i + 1;
                    }
                    buttonSet();
 
                });
        }
И сам обработчик кнопки
C#
1
2
3
4
5
private async void sbStart_Click(object sender, EventArgs e)
        {
            sbStart.Enabled = false;
            await mc.CalculateActivities(new SetStartEnable(SetButtonEnabled));
        }
Данные изменяются уже внутри таски. И сам измененный проект.
Вложения
Тип файла: 7z testNotifyProperty.7z (19.4 Кб, 4 просмотров)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
17.01.2018, 18:07
Цитата Сообщение от КОП Посмотреть сообщение
Можно/нужно ли без инвоков это делать
Можно через контекст синхронизации (хотя в принципе это то же самое). Но не нужно. Нет, конечно, можно попробовать и это даже может сработать, но делать так категорически не рекомендуется.
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
17.01.2018, 18:50
Цитата Сообщение от hoolygan Посмотреть сообщение
И сам измененный проект.
{"Cross-thread operation not valid: Control 'teShowProperty' accessed from a thread other than the thread it was created on."}
на
C#
1
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
вот об этом я и говорю. Либо галочку где-то надо поставить?

Цитата Сообщение от insite2012 Посмотреть сообщение
но делать так категорически не рекомендуется
гляну для общего образования, но делать не буду)

Добавлено через 8 минут
вроде неплохая статейка, оставлю ссылку https://habrahabr.ru/post/232169/
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
17.01.2018, 20:50
КОП, странно, у меня работает без проблем. Ну разве что в release не попробовал.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
17.01.2018, 23:10
Цитата Сообщение от hoolygan Посмотреть сообщение
странно, у меня работает без проблем.
вот так номер! кто из знающих прояснит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2018, 23:10

Обращение к элементам формы с другого потока
Есть форма, есть потоки, которые должны получить доступ к ProgressBar'у, расположенному на форме. Делал так: module *** Private...

Обращение к элементам из другого окна
Допустим в окне A происходят расчеты и данные записывается в специальный класс List //окно A public List&lt;string&gt; newlist...

Обращение к элементам активити из другого класса
Добрый день. Ломаю голову битый час, все не могу понять, почему у меня не получается. Опишу по шагам. Создал проект андроид (в эклипсе),...

Обращение к элементам Form из другого класса
Подскажите, будьте добры, как обратиться к элементу Form1 из другого класса. Мне нужно использовать изображение pictureBox1...

Обращение к элементам управления из другого потока. Проблемы с этим.
Не понимаю, что тут не так? Я пытаюсь из другого потока установить свойсво Maximum для ProgressBar. void...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru