| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Непонятный асинхронный доступ из потоков к GUI. |
| Автор: emogot 20.12.2010, 15:02 |
| Есть такой код: delegate void AddText(string text, Color color); void WriteLog(string text, Color color) { if (LogRichTextBox.InvokeRequired) { this.BeginInvoke(new AddText(WriteLog), new object[] { text, color }); } else { if ((LogRichTextBox.Lines.Length) > 100) { LogRichTextBox.Text = string.Empty; } LogRichTextBox.Select(0, 0); Font font = new Font("Tahoma", 8, FontStyle.Regular); LogRichTextBox.SelectionFont = font; LogRichTextBox.SelectionColor = color; LogRichTextBox.SelectedText = text + Environment.NewLine; } } private void Commentation() { while (flag) { lock (locker) { //WriteLog(StartPage.ToString(), Color.FromArgb(/* R */ 0x00, /* G*/ 0x66, /* B */ 0x00)); //Thread.Sleep(500); StartPage++; } } } Как то не понятно, мне казалось что при таком обращении к GUI, из потока, главное окно не должно тормозить, но оно тормозит. Если ставлю задержку например 500, то все нормально работает. Что я не так делаю? или так и должно быть? |
| Автор: Certain 20.12.2010, 15:30 | ||
Тормозит 100% из-за
используйте Thread или BackGroungWorker |
| Автор: emogot 20.12.2010, 15:49 | ||||
я и использую thread, если бы не использовал, то программа бы просто повисла, BackGroungWorker мне не подходит |
| Автор: Certain 20.12.2010, 16:03 | ||
этот метод запускается, на сколько я понял, в главном потоке. Соответственно из-за цикла подвисает главный поток запустите этот метод в отдельном потоке |
| Автор: emogot 20.12.2010, 16:20 | ||||
Вот етот метод private void Commentation(), запускается в потоке, не главном. |
| Автор: Voyager 20.12.2010, 16:30 |
| Все логично. Так обновление контролов происходит непрерывно, еще бы не тормозило. Если вы запустили цикл в потоке, это не значит что GUI, который отуда обновляется, летать будет. Доходит? Не делайте ничего с GUI и не будет тормозов. |
| Автор: emogot 20.12.2010, 16:36 | ||
как вы говорите так все и есть, мне просто было важно услышать от того кто знает, нормально это или нет, надеюсь вы знаете что говорите) спасибо большое) |