Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
AleksyVB
6 / 6 / 2
Регистрация: 10.12.2013
Сообщений: 135
#1

Многопоточность (использование двумя потоками двух разных элементов одной формы)

07.02.2014, 01:57. Просмотров 571. Ответов 1
Метки нет (Все метки)

На форме 2 RichTextBox, создается второй поток, оба потока выводят построчно индекс, который перебирается в цикле, в "свой" RichTextBox:

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
public partial class Form1 : Form
    {
        delegate void PrintInRhichTextBox(string str);
        private PrintInRhichTextBox PrintDelegateFunc;
        public Form1()
        {
            InitializeComponent();
            PrintDelegateFunc = new PrintInRhichTextBox(PrintFunc);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(ThreadFunction));
            thread.Start();
            for (int i = 0; i < 100; i++)
            {
                //MessageBox.Show("a");
                richTextBox2.AppendText(i.ToString() + "\n");
                richTextBox2.Update();
                Thread.Sleep(100);
            }
        }
        void PrintFunc(string str)
        {
            richTextBox1.AppendText(str);
            richTextBox1.Update();
            Thread.Sleep(100);
        }
        void ThreadFunction()
        {
            for (int i = 0; i < 100; i++)
                richTextBox1.Invoke(PrintDelegateFunc, new object[] { i.ToString() + "\n"});
        }
    }
Если запустить программу, то сначала выполняется главный поток, который находится в обработчике Button1, после его завершение выполняется второй поток.
Но если разкомментировать
C#
1
MessageBox.Show("a")
, то наглядно выполняются два потока одновременно. Почему так происходит?

Также если из главного потока убрать работу с RichTextBox2, и оставить в цикле только MessageBox, то так же наглядно выполняются два потока одновременно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 01:57
Ответы с готовыми решениями:

Использование разных ивентов формы
Хай, опять вопрос. Вот есть список ивентов формы:...

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

Использование данных из textBox одной формы в другой
Есть 4 формы, нужно в 4й иметь возможность использовать данные из предыдущих. Смотрел темы по этому...

Использование данных из textBox одной формы в другой
Всем привет товарищи программисты. У меня есть некая программа у коготорый первая форма с логином и...

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

1
kenny69
burning1ife
1371 / 1198 / 282
Регистрация: 21.09.2008
Сообщений: 3,356
Записей в блоге: 9
07.02.2014, 02:15 #2
я так понимаю, что при
C#
1
MessageBox.Show("a");
останавливается главный поток, который имеет больший приоритет, чем ваш другой поток.
C#
1
2
Thread thread = new Thread(new ThreadStart(ThreadFunction));
            thread.Start();
В это время он и начинает выполняться.

Если кратко, то в вашем случае UI поток имеет больший приоритет, соответственно он и выполняется вначале, пока не будет остановлен MessageBox'ом
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 02:15

Управление потоками из разных процедур
Всем привет! Такая вот незадача получилась: У меня есть несколько процедур. В одной из них у меня...

Работа с потоками, ввод (использование BinaryReader/BinaryWriter)
Всем доброго времени суток. Дали прогу для зачёта в колледже. Сижу над ней 5 часов, мучаю свой...

Использование одной и той же кнопки в двух разных местах
Существует необходимость использования одной и той же кнопки в двух разных местах, можно ли...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru