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

Из потока в форму передать данные

09.12.2011, 14:05. Показов 9191. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Так ситуация.
Есть form1 на которой есть listbox1. есть поток по имени rec.
поток работает постоянно(бесконечный цикл в нем). вот и он должен данные(string) добавлять в listbox1 на form1. поток запускается ранее путем:
C#
1
2
3
One on = new One();
Thread eve = new Thread(on.Events);
eve.Start();
то что выполняется в потоке находится в отдельном классе.

И listBox1 он в Modifiers = public
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
namespace WindowsFormsApplication1
{
    
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
        }
    }
 
    class One
    {
 
        public void Events()   //Это выполняется в потоке
         {
         string str;
           //тут бесконечный цикл который который выдает новые даннsе в str.
//И тут же проблема, нужно сделать так чтобы данные попадали в listbox
         }
    }
 
}
Как реализовать передачу данных в форму.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.12.2011, 14:05
Ответы с готовыми решениями:

Передать в форму значение из потока
Поток в результате своей работы возвращает строку. Как её передать в главную форму? Добавлено через 19 минут Нашёл. Для...

Передать данные из основного потока в дочерний
Здравствуйте, у меня есть программа с основным кодом, который крутиться в бесконечном цикле и опрашивает внешнее устройство. Проект...

Вывести данные на форму из потока
Доброй ночи всем. Вот у меня такая удивительная проблема. До этого я пользовался только делфей и никогда не думал, что у меня могут...

12
185 / 185 / 53
Регистрация: 10.04.2009
Сообщений: 491
09.12.2011, 14:18
добавте какой-то общий ресурс, в потоке туда пишите данные, и считывайте из него для box, или передайте list box в поток
так же вот IAsyncResult
0
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 70
09.12.2011, 14:26  [ТС]
Если делать вот так в потоке:
C#
1
2
Form1 fm = new Form1();
fm.listBox1.Items.Add(str);
То есть добавлять сразу то ничего не выходит.
Даже больше скажу он добавляет но не отображает в listBox1.(См. Картинку)
Миниатюры
Из потока в форму передать данные  
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
09.12.2011, 14:46
freeddos, ты ещё из программы в комнату передай.
0
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 70
09.12.2011, 14:51  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
freeddos, ты ещё из программы в комнату передай.
Как проблему решить? если есть варианты то предложите.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
09.12.2011, 14:56
Какую проблему? В форме данных нет и быть не может, все данные только в потоках.
0
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 70
09.12.2011, 14:57  [ТС]
taras atavin, нужно данные из потока а именно строку добавить в listBox1 который на Form1. как это реализовать?
В моем случае.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
09.12.2011, 14:59
Ну так и говори, что тебя вывод на экран через объект класса TListBox интересует. И из какого потока7 Они бывают двух видов: первичные и вторичные. И это различие важно: при экранном выводе из вторичного потока его надо синхронизировать с первичным, а при выводе из первичного синхронизация не допустима.
0
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 70
09.12.2011, 15:18  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну так и говори, что тебя вывод на экран через объект класса TListBox интересует. И из какого потока7 Они бывают двух видов: первичные и вторичные. И это различие важно: при экранном выводе из вторичного потока его надо синхронизировать с первичным, а при выводе из первичного синхронизация не допустима.
если в потоке.
IsBackground=false - это означает что поток основной?
если так что он у меня основной

ЗЫ Он у меня включается и работает всю программу параллельно.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
09.12.2011, 15:24
Цитата Сообщение от freeddos Посмотреть сообщение
IsBackground=false - это означает что поток основной?
Первичность/вторичность потока определяется не данными, а тем, кто создал этот поток. Первичный поток - это поток, способный принимать сообщения и созданный операционной системой при старте процесса, то есть неявный поток с максимальными полномочиями, а вторичный - тот, который создала уже твоя прога с помощью функции __beginthread, или с помощью new Thread(on.Events), или ещё как, но который не может принимать сообщения.
0
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 70
09.12.2011, 15:26  [ТС]
taras atavin, ок, тогда у меня нужно передать из вторичного(созданного и запущенного моей прогой) в первичный(потому что первой инициализируется Form1 тем самым это первичный поток).
тоесть вторичный потоку получил какие то данные, и эти данные нужно передать первичнопу потоку, чтобы эти данные отобразить в listBox1.
0
0 / 0 / 0
Регистрация: 02.02.2012
Сообщений: 4
17.09.2012, 11:04
У меня аналогичная проблема, вторичный поток - это ТСР клиент, который получает данные от сервера. Первичный поток обрабатывает эти данные. Сделала так: создала переменную
C#
1
private static ClUserData lastData;
Создала класс для передачи параметров в поток
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
class ClGetMessage
    {
        public String serverAddr;
        public Int32 serverPort;
        public ClUserData lastData;
 
 
        public ClGetMessage(String addr, Int32 port, ClUserData userData)
        {
            serverAddr = addr;
            serverPort = port;
            lastData = userData;
        }
в классе Form1 написала 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
   private static ClUserData Connect(String addr, Int32 port, ClUserData lastData)
        {
           ClUserData userData = new ClUserData();
           ...
            return userData;
        }
 
        public static void Add(object data)
        {
            if (data is ClGetMessage)
            {
                ClGetMessage gm = (ClGetMessage)data;
               lastData= Connect(gm.serverAddr, gm.serverPort, lastData); 
 
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            ClGetMessage ap = new ClGetMessage(serverAddr, serverPort, lastData);
            Thread t = new Thread(new ParameterizedThreadStart(Add));
            t.Start(ap);
        }
Но, не работает, если все делать в одном потоке, то на форму выводится ошибка подключения к серверу. А в потоке - не выводится.
0
Amiron
29.05.2013, 17:01
this is:
C#
1
2
3
thread  t = new thread(delegate(){listBox1.Items.Add(on.Events);}); //input string for listBox1 in main Thread
.start();
//no void, public void Events(), is  public string Events()
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2013, 17:01
Помогаю со студенческими работами здесь

Как передать данные из одного потока в другой?
Есть отдельный поток для чтения данных и основной поток для обработки данных. Из этого потока данные нужно передать в основной поток. ...

Как из потока вывести данные на форму
Приветсвую. Раскажите, кто знает. Как из потока вывести данные на форму. Например, вевести обработанные данные в static text.

Как передать данные из дочерного потока в главный поток
Здравствуйте. Искал по форуму есть похожие темы но нет решения. Есть класс который загружает данные по очереди из определенного адреса в...

Передать данные в форму
Доброго времени суток! Ничего не понимаю в html. Как в форму передать данные? Вот я сейчас набираю сюда текст, а потом он как-то...

Передать данные в форму
что хочу: хочу сделать форме автозаполнение. как я это планирую осуществить: передать в форму структуру типа...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru