Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/27: Рейтинг темы: голосов - 27, средняя оценка - 4.56
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913

работа с BackGroundWorker

17.08.2011, 11:35. Показов 5386. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, разобраться с BackGroundWorker. Есть код. По кнопке читаю с модема данные, записываю в DataGridView. Как его разделить этот код, чтобы в DataGridView записывались данные в основном потоке, а само считывание было в фоновом. MSDN читаю. пока все смутно. В примере там есть DoWorker, и тут же в примечании"В обработчике событий DoWork нельзя выполнять действия ни с какими объектами пользовательского интерфейса.Вместо этого следует взаимодействовать с пользовательским интерфейсом с помощью событий ProgressChanged и RunWorkerCompleted."
Вообщем, помогите разобраться!Спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2011, 11:35
Ответы с готовыми решениями:

Работа с e.Result в BackGroundWorker
Здравствуйте, уважаемые профи. Нашел на форуме код: private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs...

Работа с backgroundWorker
Пусть например у нас есть две формы Form1 и Form2. На первой форме разместим listbox, в который мы будем заносить название стран в другом...

Работа BackgroundWorker с listbox
Добрый день :) Имеется программа - запись массива файл, необходимо в listbox сообщать, что программа делает - то и есть, первое - генерация...

2
4 / 4 / 1
Регистрация: 29.07.2011
Сообщений: 41
17.08.2011, 11:42
Посмотри это. Может поможет
[SPOILER]
 Комментарий модератора 
Перечитайте правила форума.
Ссылки на сторонние форумы запрещены.
1
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
18.08.2011, 14:41  [ТС]
Лучший ответ Сообщение было отмечено iva_a как решение

Решение

Спасибо, пытаюсь разобраться... Пока не очень ...

Добавлено через 21 час 43 минуты
Тема все еше актуальна. Поставила на форму BackGroundWorker, В DoWork вызываю свою функцию , которая открывает порт, считывает данные и записывает в DataGridView. Первая ошибка, которая вылетает- на ComBox, где хранится номер com, вообщем, точно по MSDN. Может, кто посможет?
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
        private void button5_Click(object sender, EventArgs e)
        {
            button5.Enabled = false;
            backgroundWorker1.RunWorkerAsync();
 
        }
        public void GoStart()
        {
            try
            {
 
                TestEeprom.WorkSerialCom op = new WorkSerialCom();
                op.OpenCom(comboBox1.Text);
               // op.OpenCom("COM1");//если так, то ошибка перемещается на 1 обращение к dataGridView1
                op.SendToPort("#rd_eeprom\r");
                System.Threading.Thread.Sleep(5000);
                byte[] bufer = new byte[1024];
                List<Eeprom> MyItemsList = new List<Eeprom>();
                int bytes = 0;
                int index = 0;
                int k = 0;
                while (true)
                {
                    index = 0;
                    while (op.com.BytesToRead > 0)
                    {
                        bytes = op.com.BytesToRead;
                        op.com.Read(bufer, index, bytes);
                        index += bytes;
                        System.Threading.Thread.Sleep(100);
                    }
                    {
                        if (index >= 6)
                        {
                            var item = new Eeprom(bufer);
                               var b = item.CreateRawItem();
                            MyItemsList.Add(item);
                            Debug.WriteLine("ID= " + item.ID);
                            Debug.WriteLine("Lenght= " + item.Lenght);
                            Debug.WriteLine("Data = " + BitConverter.ToString(item.Data));
 
                            dataGridView1.Rows.Add();// т.е. сюда!!!
                            int last = dataGridView1.Rows.Count - 1;
                            dataGridView1.Rows[last].Cells[0].Value = item.ID;
                            dataGridView1.Rows[last].Cells[1].Value = item.Lenght;
                            dataGridView1.Rows[last].Cells[2].Value = BitConverter.ToString(item.Data);
 
                            dataGridView1.Rows[k].HeaderCell.Value = (k + 1).ToString();    // number rows
                                 
                            k++;
                        }
 
                        if (index >= 3)
                        {
                            var text = System.Text.Encoding.ASCII.GetString(bufer, 0, index);
                            textBox3.Text = text;
                            if (text.IndexOf("END") != -1)
                            {
                                MessageBox.Show("End!");
 
                                break;
                            }
                        }
 
                        // ParentTester.com.Write("\r");
                        op.SendToPort("\r");
                        System.Threading.Thread.Sleep(100);
                    }
                    //------------------
                   /* if (threadStop.WaitOne(0))
                        break;*/
 
                }
            }
            catch (Exception x)
            {
                MessageBox.Show(x.ToString());
            }
            finally
            {
              //  op.CloseCom(comboBox1.Text);
 
            }
           
 
        }
 
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            button5.Enabled = true;
            MessageBox.Show("E N D !");
        }
 
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            GoStart();
        }
Добавлено через 2 часа 8 минут
Разобралась наконец. Если кому интересно, надо обрашаться к контролам на форме через Invoke
Где-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private void updateDataGridView(DataGridView dgv, string[] message,int k)
        {  if (IsDisposed)
                return;
        if (InvokeRequired)
            {
                Invoke(new Action<DataGridView,string[], int>(updateDataGridView),dgv,message,k);
                return;
            }
             dgv.Rows.Add();
             int last = dgv.Rows.Count - 1;
             dgv.Rows[last].Cells[0].Value = message[0];
             dgv.Rows[last].Cells[1].Value = message[1];
             dgv.Rows[last].Cells[2].Value = message[2];
             dgv.Rows[k].HeaderCell.Value = (k + 1).ToString();
 
        }
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2011, 14:41
Помогаю со студенческими работами здесь

Совместная работа ProgressBar и BackgroundWorker
Долгое время уже мучаюсь с этим прогресс баром, который связан с backgroundWorker'oм. Пробовал разные варианты, как это сделать, но......

backgroundWorker
backgroundWorker не хочет исполнять такой код: helptxt2-&gt;Text = r-&gt;ReadToEnd(); Он просто доходит до этого места и...

BackgroundWorker
Приветствую . Пытаюсь закодить проект с динамическим добавлением потоков , все бы хорошо , но я не могу вывести логи о работе в потоках в...

BackgroundWorker
Можно ли определить ProgressChanged для всех BackgroundWorker`ов? Или как осуществить подобное?

BackgroundWorker
Есть 10 button-ов и 1 backgroundWorker. При нажатии на любой button должен запускаться поток, в котором анализируется от какого button-а...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru