Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 28

Связь потоков с формой

29.09.2011, 17:51. Показов 1282. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поток должен изменять значение элементов в форме (2x richTextBox, CheckBox)
Как это реализовать?
Приведите пожалуйста пример с richTextBox.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2011, 17:51
Ответы с готовыми решениями:

Связь потоков и ЦП
Добрый день. Так и не смог найти внятного ответа на вопрос о том, какая связь между потоком из пула потоков и потоком центрального...

Работа с формой с помошью потоков
Добрый день! Извиняюсь, что вопрос глуп, но. Форма MainWindow создает и показывает форму Monitor mntr. В форме VideoWorked создается...

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

8
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
29.09.2011, 17:58
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
using System;
using System.Windows.Forms;
using System.Threading;
 
namespace WinFormTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Thread thread = new Thread(Check);
            thread.Start();
        }
 
        private void Check()
        {
            while (true)
            {
                if (richTextBox1.Text == "word")
                    richTextBox1.Text = "nice";
            }
        }
    }
}
Пишешь в поле word, а программа исправляет его на nice.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
29.09.2011, 19:09
Цитата Сообщение от Blood-Angel Посмотреть сообщение
Пишешь в поле word, а программа исправляет его на nice.
А вы в работе проверяли то что написали? У меня нельзя к richTextBox1 обратиться из другого потока.


Вот так думаю лучше будет, хоть это тоже не самый лучший вариант.
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
54
55
56
57
58
59
60
61
62
63
using System;
using System.Threading;
using System.Windows.Forms;
 
namespace WinForms_TestThread
{
    public delegate void ChachgeTextHandler(string text, string newText);
    public partial class Form1 : Form
    {
        AutoResetEvent autoResetEventCheck;
        object lockerRichTextBox;
 
        public Form1()
        {
            InitializeComponent();
            autoResetEventCheck = new AutoResetEvent(false);
            lockerRichTextBox = new object();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Thread thread = new Thread(Check);
            thread.IsBackground = true; //чтобы с основным потоком приложения автоматом и этот поток завершался
            thread.Start();
        }
 
        private void Check()
        {
            while (true)
            {
                CheckText("word", "nice");
                autoResetEventCheck.WaitOne();
            }
        }
 
        private void CheckText(string text, string newText)
        {
            ChachgeTextHandler chHandler = new ChachgeTextHandler(
                delegate(string txt, string newTxt)
                {
                    lock (lockerRichTextBox)
                    {
                        if (richTextBox1.Text == text)
                        {
                            richTextBox1.TextChanged -= richTextBox1_TextChanged; 
                            richTextBox1.Text = newText;
                            richTextBox1.TextChanged += new EventHandler(richTextBox1_TextChanged);
                        }
                    }
                });
 
            if (richTextBox1.InvokeRequired)
                richTextBox1.Invoke(chHandler, text, newText);
            else
                chHandler(text, newText);
        }
 
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            autoResetEventCheck.Set();
        }
    }
}
Добавлено через 4 минуты
добавил в код кое-какие поправки...
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
29.09.2011, 19:21
Цитата Сообщение от Casper-SC Посмотреть сообщение
А вы в работе проверяли то что написали? У меня нельзя к richTextBox1 обратиться из другого потока.
Да, я весь код проверяю. У меня все работает.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
29.09.2011, 19:36
Цитата Сообщение от Blood-Angel Посмотреть сообщение
Да, я весь код проверяю. У меня все работает.
В любом случае это не правильно. Не знаю как у вас работает, но у меня точно не работает.

Для начала надо почитать, как минимум первую статью (вообще лучше конечно же все прочитать):
Работа с потоками в C#. Часть 1
Работа с потоками в C#. Часть 2
Работа с потоками в C#. Часть 3. Параллельное программирование

Советую почитать ещё это: Атомарность, изменчивость и неизменяемость – это разные вещи. Часть 3 (многие вещи станут понятнее в многопоточном программировании).
1
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
29.09.2011, 19:40
Casper-SC, а ведь это не дает ответа на то, почему у меня этот код работает и в Debug, и в Release. Без всяких сообщений об ошибке или предупреждений.
А вообще по хорошему я бы использовал Invoke.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
29.09.2011, 19:43
Цитата Сообщение от Blood-Angel Посмотреть сообщение
Casper-SC, а ведь это не дает ответа на то, почему у меня этот код работает и в Debug, и в Release. Без всяких сообщений об ошибке или предупреждений.
А вообще по хорошему я бы использовал Invoke.
Я не помню точно, но помоему в студии есть какая-то настройка, чтобы не вылетало исключение при обращении к контролам на форме из другого потока. Но! Не следует это принимать за правильный ответ, так как я точно не помню, возможно кто-то подтвердит/опровергнет это сообщение.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
29.09.2011, 19:47
Вот скриншот исключения, вылетает при первом обращении к RichTextBox.
Миниатюры
Связь потоков с формой  
1
39 / 39 / 8
Регистрация: 11.05.2011
Сообщений: 78
29.09.2011, 21:20
Можно еще так безопасно изменять значение richTextBox из потока
C#
1
2
3
4
Invoke(new Action(delegate
{
    richTextBox1.Text = "текст";
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2011, 21:20
Помогаю со студенческими работами здесь

Связь с подчинённой формой
Помогите связать подчинённую форму Операции и Поле со списком Шифр_детали. Нужно чтобы при выборе в поле Шифр_детали на главной форме в...

Ручное создание вторичных потоков и операции с формой
Добрый день! Подскажите, пожалуйста по взаимодействию вторичных потоков и формы, Ответы на 7 самых частых вопросы изучил, именно на мой...

Связь между навигационной формой
Здравствуйте. Создал горизонтальную навигационную форму со вкладками. Перетащил одну форму на первую вкладку и вторую форму на вторую...

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

Обратная связь с формой из ячейки в Excel
Люди добрые помогите, немогу решить проблему: нужно чтобы при двойном щелчке на ячейке вызывалась какая либо форма, если конкретно то мне...


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

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