Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 23.03.2012
Сообщений: 6

Доступ к элементу дочерней формы из параллельного потока

30.09.2012, 20:28. Показов 3302. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вопрос заключается в том, как из параллельного потока получить доступ к элементу некоторой формы, созданной в исходной форме:

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
namespace my_program
{
    public partial class main_window : Form
    {
        private Thread _background;
        private Form Showsentpackets;
 
        public main_window()
        {
            InitializeComponent();
        }
 
        private void _sent_packets_CheckedChanged(object sender, EventArgs e)
        {
 
                if (_sent_packets.Checked)
                {
                    Showsentpackets = new SentPacketsDisplay();
                    Showsentpackets.Show();
                }
                else
                    Showsentpackets.Close();
        }
 
        private void connect_Click(object sender, EventArgs e)
        {
            _background = new Thread(realtime_process);
            _background.Priority=ThreadPriority.High;
            _background.Start();            
        }
 
        void realtime_process()
        {
            //тут хотелось бы записать в textbox1 формы Showsentpackets некоторую строку
        }
 
   }
}
подобные действия с исходной формой осилил, подглядев решение в Wagner B. More Effective C# и добавив в проект следующее:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static class ControlExtentions
    {
        
        public static void InvokeIfNeeded(this Control control, Action doit)
        {
            if (control.InvokeRequired)
                control.Invoke(doit);
            else
                doit();
        }
        
 
        public static void InvokeIfNeeded<T>(this Control control, Action<T> doit, T arg)
        {
            if (control.InvokeRequired)
                control.Invoke(doit, arg);
            else
                doit(arg);
        }
    }
если все правильно понимаю, то нету доступа к элементам интересующей формы...

попробовал разобраться почитав
Ответы на 7 самых частых вопросов по WinForms
, попытавшись сделать подобное хотя бы из основной формы,но не получилось=(
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2012, 20:28
Ответы с готовыми решениями:

Как из дочерней формы получить доступ к элементу управления родительской формы
Есть две формы: родительская(Form1) и дочерняя(Form2). В родительской форме(Form1) находятся textBox1 и button1. В дочерней форме...

Доступ к элементам формы из параллельного потока, запущенного из модуля
Добрый день, коллеги! В поиске решения. Надеюсь на Вашу помощь. Задача - из модуля в параллельном потоке запустить процедуру класса,...

Доступ к элементу формы из другого потока
Добрый день! Хочу по событию изменить текст кнопки. private void OnDisconnected(object sender, DisconnectedEventArgs args) ...

2
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.09.2012, 20:51
Вы не знаете как передать параметры потоку? http://habrahabr.ru/post/126495/
0
0 / 0 / 1
Регистрация: 23.03.2012
Сообщений: 6
30.09.2012, 21:29  [ТС]
а в случае, если дочерняя форма может открываться/закрываться в процессе работы, то переданный при запуске потока контрол будет рабочим?

внезапно нашел выход из ситуации, попробовав для вывода из realtime_process использовать следующее:
C#
1
2
var smth = Showsentpackets.Controls.Find("textbox1", false);
this.InvokeIfNeeded(() => smth[0].Text += "whooooo-hoah!");
это является костылями или же нормальным вариантом?)

Добавлено через 25 минут
все же это костыль, тк с DataGridView не получилось получить доступ к методу Rows.Add();

Цитата Сообщение от turbanoff Посмотреть сообщение
Вы не знаете как передать параметры потоку? http://habrahabr.ru/post/126495/
не совсем понятно что именно мне следует передавать потоку. да и передать это можно не обязательно при инициализации.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.09.2012, 21:29
Помогаю со студенческими работами здесь

Использование параллельного потока для формы
Заголовок не о чём.. Так как не пойму как с этим работать и как правильно написать ))) Всем доброго !) Так вот ... Делаю уже...

System.StackOverflowException при обращении к элементу главной формы из дочерней формы
При закрытии дочерней формы (client) необходимо обратиться к элементу listView1 главной формы (server). // Тут в форме server создаю...

Доступ к элементу управления и BGW потока
Здарвствуйте. Такая проблема - есть контрол на форме, есть поток - неужели нельзя из этого потока получить доступ к контролу. ...

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

Доступ к компонентам главной формы из дочерней
Всем здравствуйте, есть на делфи 2 формы: главная и дочерняя. Скажите пожалуйста, как находясь в дочерней форме получить доступ к полям,...


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

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