15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168
1

Два backgroundWorker и таймер на форме. Организовать их правильное взаимодействие

13.12.2013, 15:34. Показов 1046. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня на форме есть два backgroundWorker первый отвечает за сканирование сети и работает с прогрес баром и таймером.

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
 private bool scan()// Сканер Сети
        {
            Ping ping = new Ping();
            string ip;
            number_scaned_ip = 0;
            number_free_ip = 0;
            for (int i = 0; i <= dataGridView1.RowCount - 2; i++)
            {
                number_scaned_ip++;
                ip = dataGridView1.Rows[i].Cells[1].Value.ToString();
                PingReply pingReply = ping.Send(ip, 10);
                if (pingReply.Status.ToString() != "Success")
                {
                    dataGridView1.Rows[i].Cells[3].Value = "free";
                    number_free_ip++;
                }
                else
                {
                    try
                    {
                        dataGridView1.Rows[i].Cells[2].Value = Dns.GetHostEntry(ip).HostName;
                        dataGridView1.Rows[i].Cells[4].Value = GetMacAddress(ip);
 
                    }
                    catch { dataGridView1.Rows[i].Cells[2].Value = "n/a"; }
                }
 
                backgroundWorker1.ReportProgress(i);
                Thread.Sleep(254);
            }
            return true;
        }
 
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = scan();
        }
 
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            viI = e.ProgressPercentage;
        }
 
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (viI != 0 && viI <= 252)
            {
                progressBar1.Value = viI;
            }
            if (viI == 253)
            {
                PING.Enabled = true;
                Users.Enabled = true;
                Scan_local_net.Enabled = true;
                timer1.Enabled = false;
                progressBar1.Visible = false;
                dataGridView1.Enabled = true;
                Export_scan_Ip.Enabled = true;
                viI = 0;
                label8.Text = number_scaned_ip.ToString();
                label10.Text = number_free_ip.ToString();
                label8.Visible = true;
                label9.Visible = true;
                label10.Visible = true;
                label11.Visible = true;
                groupBox4.Enabled = true;
                groupBox5.Enabled = true;
            }
        }
Второй должен отвечать за Пинговку определенной группы ip.

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
private bool reping()
        {
            for (int i = 0; i <= dataGridView2.RowCount - 2; i++)
            {
                Ping ping = new Ping();
                PingReply pingReply = ping.Send(dataGridView2.Rows[i].Cells[2].Value.ToString(), 150);
                dataGridView2.Rows[i].Cells[3].Value = pingReply.Status;
                dataGridView2.Rows[i].Cells[4].Value = pingReply.RoundtripTime;
                if (pingReply.Status.ToString() != "Success")
                {
                    //dataGridView4->Rows[0]->Cells[i]->Style->BackColor
                    dataGridView2.Rows[i].Cells[0].Style.BackColor = Color.Red;
                    dataGridView2.Rows[i].Cells[1].Style.BackColor = Color.Red;
                    dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
                    dataGridView2.Rows[i].Cells[3].Style.BackColor = Color.Red;
                    dataGridView2.Rows[i].Cells[4].Style.BackColor = Color.Red;
                }
                else
                {
                    dataGridView2.Rows[i].Cells[0].Style.BackColor = Color.White;
                    dataGridView2.Rows[i].Cells[1].Style.BackColor = Color.White;
                    dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.White;
                    dataGridView2.Rows[i].Cells[3].Style.BackColor = Color.White;
                    dataGridView2.Rows[i].Cells[4].Style.BackColor = Color.White;
                }
            }
            return true;
        }
 
        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = reping();
        }
Но беда состоит в том что backgroundWorker2 почему-то обращается к таймеру который прикручен к 1му и некогда оттуда не выходит..... Подскажите как решить этот вопрос.

Добавлено через 3 часа 20 минут
Все вопрос снимается. Правильный ответ сам дурак чего написал того и делает. там где вызывал
C#
1
 backgroundWorker2.RunWorkerAsync();
было дополнительно запустить Timer1.

Кстати кому интересны пингователи и простой сканер сети коды рабочие.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2013, 15:34
Ответы с готовыми решениями:

Таймер в Backgroundworker
Как сделать таймер в background worker ? Пытался сделать нормальный таймер обратного отсчета в...

Правильное взаимодействие с БД на WinForm
Добрый день! Изучаю вопрос по созданию CRM (много таблиц, много форм), но так и не могу понять как...

Потоки (backgroundWorker) в другой форме
Всем привет. Собственно, имеются две формы. Во второй форме создается поток через...

BackGroundWorker запускается два раза
public Form1() { InitializeComponent(); ...

0
13.12.2013, 15:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2013, 15:34
Помогаю со студенческими работами здесь

Два экземпляра класса BackgroundWorker с разными обработчиками
Здравствуйте. На сколько я уже понял, сколько бы экземпляров не создавалось, обработчик событий...

Статическая переменная на два потока WinForm и BackgroundWorker
Уважаемые гуру программирования нужна Ваша помощь. Недавно начал изучать C# и столкнулся с...

Как организовать взаимодействие кнопок?
Страничка сайта(на wp) с 7-ю кнопками(у каждой две задачи-скачать(линк или файл) и перейти на...

Организовать межмодульное взаимодействие (Borland 3.1)
В проекте имеется несколько модулей: Unit1.cpp, Unit2.cpp,...UnitN.cpp Один из них(назовем его...

Как организовать межпрограммное взаимодействие?
Есть два приложения. Оба они одноврмененно запущены. Есть ли возможность заставить их общаться...

Взаимодействие с кнопками. как организовать
Доброго времени суток) Работаю в visual studio 2010. На форме 32 кнопки с именами button1,...


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

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

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