Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
AleksyVB
6 / 6 / 1
Регистрация: 10.12.2013
Сообщений: 135
#1

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

07.02.2014, 01:57. Просмотров 558. Ответов 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
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 01:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Многопоточность (использование двумя потоками двух разных элементов одной формы) (C#):

Использование разных ивентов формы - C#
Хай, опять вопрос. Вот есть список ивентов формы: http://msdn.microsoft.com/en-us/library/system.windows.forms.form_events(v=vs.110).aspx...

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

Использование данных из textBox одной формы в другой - C#
Есть 4 формы, нужно в 4й иметь возможность использовать данные из предыдущих. Смотрел темы по этому поводу на форуме (в том числе и &quot;Ответы...

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

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

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

1
kenny69
burning1ife
1370 / 1197 / 171
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Использование несколькими потоками одной функции - C++
Есть вот такая функция для =которую выполняют рабочие потоки DWORD WINAPI ThreadFunc(void *pV) { Data* pD = (Data*)pV; int n,...

Многопоточность: Относительно двух разных экземпляров класса требуется вызвать одну и ту же функцию - C#
Есть класс, относительно двух разных его экземпляров требуется вызвать одну и ту же функцию. Пробовал так: Thread thr = new...

Использование двух записей одной таблицы в одной записи другой - MySQL
Всем привет! Есть таблица &quot;Application&quot;, в ней есть 2 поля, которые содержат: ID пользователя, который запись создал и ID...


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

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

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