0 / 0 / 1
Регистрация: 02.09.2009
Сообщений: 6
1

Обращение к GUI из потока - вопрос быстродействия

02.09.2009, 18:28. Показов 1875. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, уважаемые!

Есть участок работающий с приемом данных по COM-порту. Реализовано стандартно:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public SynchronizationContext uiContext;
...
private void frm_comport_Load(object sender, EventArgs e)
{
   ...
   uiContext = SynchronizationContext.Current;
   p.DataReceived += new SerialDataReceivedEventHandler(func_port_DataReceived);
   sp.Open();
}
...
public void func_port_DataReceived(Object sender, SerialDataReceivedEventArgs e)
{
   ...
   uiContext.Send(d => button1.Text = "Message", null);
   ...
}
Обращаюсь к некоему контролу путем, описанным в листинге выше. Падает быстродействие выполнения операций в func_port_DataReceived().

Вопрос: можно ли каким другим способом обратиться в контролу? кроме Invoke...
Можно ли его создать динамически и задать ему принадлежность этому потоку?

Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2009, 18:28
Ответы с готовыми решениями:

Вопрос быстродействия SELECT
Есть таблица: 300 строк, 200 столбцов. Что быстрее. Выбрать SELECTом 300 строк сразу или выполнить...

Вопрос быстродействия SELECT
Есть таблица: 300 строк, 200 столбцов. Что быстрее. Выбрать SELECTом 300 строк сразу или выполнить...

Вопрос быстродействия индексов
Что быстрее: 3 индекса по 1 столбцу или один составной индекс, включающий все 3 поля ? Зависит ли...

Обращение к элементу WinForms из потока, отличного от потока, в котором это элемент был создан
Пишу приложение, котором при загрузке формы в textbox на этой форме заносятся данные. Причем данных...

2
0 / 0 / 1
Регистрация: 02.09.2009
Сообщений: 6
02.09.2009, 21:36  [ТС] 2
количество просмотров растет, а никто не пишет

уточню тогда поподробней, что я вообще делаю, и что хочу получить!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void func_port_DataReceived(Object sender, SerialDataReceivedEventArgs e)
        {
            uiContext.Send(d=> (this).Text = sp.BytesToRead.ToString(), null);
            read_byte_string = sp.ReadExisting();
            for (int i = 0; i < read_byte_string.Length;i++ )
            {
                counter++;
                uiContext.Send(d => button1.Text = Convert.ToByte(read_byte_string[i]).ToString(), null);
                //uiContext.Send(d => button1.Text = Convert.ToByte(read_byte_string[i]).ToString(), null);
                //uiContext.Send(d => button1.Text = Convert.ToByte(read_byte_string[i]).ToString(), null);
                //uiContext.Send(d => button1.Text = Convert.ToByte(read_byte_string[i]).ToString(), null);
                //uiContext.Send(d => button1.Text = Convert.ToByte(read_byte_string[i]).ToString(), null);
                sw.WriteLine(counter.ToString()+"\t"+DateTime.Now.ToString("HH:mm:ss.fff")+"\t"+Convert.ToByte(read_byte_string[i]));
            }
        }
посылаю на com-порт много много инфы (115200 bit|s)

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

если все строчки с ...uiContext.Send(d => button1.Text... закомментированы, то данное число колеблется в пределах 10-13. Я понимаю это как - пока выполнялась запись в файл в цикле, в буффер успело набежать 10-13 байт.

если расскомментировать одну строку с ...uiContext.Send(d => button1.Text... , то число вырастает до 350, 2 строки - порядок 2500!!!

а существует необходимость работать с контролами. вот поэтому и стоит вопрос как сделать обращение к контролам наиболее быстрым.
0
308 / 161 / 11
Регистрация: 07.06.2009
Сообщений: 538
02.09.2009, 21:57 3
я для таких вещей делал опрашивающий таймер winforms.

Добавлено через 3 минуты
можешь еще с begininvoke попробовать, но тогда очередь сообщений забьется и интерфес не будет откликаться. по крайней мере так было на моем драндулете.
0
02.09.2009, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2009, 21:57
Помогаю со студенческими работами здесь

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

Еще один, не менее интересный вопрос быстродействия SELECT.
Два случая: а) Таблица состоит из 10000 строк,1 столбец. б) Таблица состоит из 5...

Еще один, не менее интересный вопрос быстродействия SELECT
Два случая: а) Таблица состоит из 10000 строк,1 столбец. б) Таблица состоит из 5...

Работа с gui из потока
Можно ли работать с gui приложения непосредственно из потока(многопоточность)? Если нет, то есть ли...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru