Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168

Подвисание формы при сканировании сети

04.12.2013, 16:16. Показов 1085. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть две формы. НА первой по нажатию на кнопочку происходит скан локальной сети. Выглядит это так
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
string test_ip;
 
            Ping ping = new Ping();
 
            Timer_bar_scaning timer_bar = new Timer_bar_scaning();
            timer_bar.language = language;
            timer_bar.bar("ok");
            timer_bar.Visible = true;
            for (int i = 1; i <= 254; i++)
            {
                test_ip = "";
                test_ip = new_a + "." + i;
                dataGridView1.Rows.Add(i, test_ip, "", "");
            }
            string ip;
            for (int i = 0; i <= dataGridView1.RowCount - 2; i++)
            {
                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";
                }
                else 
                {
                    try
                    {
                        dataGridView1.Rows[i].Cells[2].Value = Dns.GetHostEntry(ip).HostName;
                       
                    }
                    catch { dataGridView1.Rows[i].Cells[2].Value ="n/a"; }
                }
            }
 
                timer_bar.bar("false");
Перед началом сканирования сети создается доп форма на которой есть элемент прогресс бар, он описывается и тд..
C#
1
2
3
4
Timer_bar_scaning timer_bar = new Timer_bar_scaning();
            timer_bar.language = language;
            timer_bar.bar("ok");
            timer_bar.Visible = true;
функция timer_bar.bar("ok"); отвечает за работу этого прогресбара.

Как только начинает выполняться
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
for (int i = 1; i <= 254; i++)
            {
                test_ip = "";
                test_ip = new_a + "." + i;
                dataGridView1.Rows.Add(i, test_ip, "", "");
            }
            string ip;
            for (int i = 0; i <= dataGridView1.RowCount - 2; i++)
            {
                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";
                }
                else 
                {
                    try
                    {
                        dataGridView1.Rows[i].Cells[2].Value = Dns.GetHostEntry(ip).HostName;
                       
                    }
                    catch { dataGridView1.Rows[i].Cells[2].Value ="n/a"; }
                }
            }
первая форма как-будто подвисает и естественно не видно не статус бара не чегего. Подскажите как выйти из подобной ситуации.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2013, 16:16
Ответы с готовыми решениями:

Подвисание при прорисовке формы
Доброго времени суток. Возникала такая проблема. Раньше никогда не писал приложений с большим количеством картинок и фонов на форме, а...

Подвисание формы при выполнении цикла
Здраствуйте уважаемые форумчани. Вот пишу игрушку &quot;пятнашки&quot;. Дело в том что при перемещении кнопочек я использую анимацию- т.е. по...

Подвисание формы при перетаскивании
Добрый день. Есть следующая проблема. Рисую на компоненте ZedGraphControl график из большого числа точек, график во времени не...

2
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
04.12.2013, 16:21
decoexire, нужно выполнять задания в разных потоках, в частности последний код можно выделить в отдельный поток. Попробуйте использовать BackgroundWorker или другие средства.
0
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168
04.12.2013, 17:31  [ТС]
Цитата Сообщение от tezaurismosis Посмотреть сообщение
decoexire, нужно выполнять задания в разных потоках, в частности последний код можно выделить в отдельный поток. Попробуйте использовать BackgroundWorker или другие средства.
Идея то интересная как бы ее теперь воплотить в жизнь желательно с кусочком кода

Добавлено через 38 минут
Поковырялся решил немного изменить задачу теперь прогрес бар находится на этой форме при нажатии на кнопку выполняется следующее
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
private void Scan_local_net_Click(object sender, EventArgs e)
        {
            groupBox1.Visible = true;
            groupBox2.Visible = false;
            groupBox3.Visible = false;
            this.groupBox1.Location = new System.Drawing.Point(24, 98);
            this.groupBox1.Size = new System.Drawing.Size(657, 515);
            
            IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
            String my_ip = localIPs[2].ToString();
            label7.Text = my_ip;
            string[] a = my_ip.Split('.');
            string podset = a[0].ToString() + "." + a[1].ToString() + "." + a[2].ToString();
            string test_ip;
            for (int i = 1; i <= 254; i++)
            {
                test_ip = "";
                test_ip = podset + "." + i;
                dataGridView1.Rows.Add(i, test_ip, "", "");
            }
            PING.Enabled = false;
            Users.Enabled = false;
            Scan_local_net.Enabled = false;
            timer1.Enabled = true;
            progressBar1.Visible = true;
            progressBar1.Value = 0;
            dataGridView1.Enabled = false;
            Export_scan_Ip.Enabled = false;
            backgroundWorker1.RunWorkerAsync();
 
        }
Используя 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
private bool scan()
        {
            Ping ping = new Ping();
            string ip;
            for (int i = 0; i <= dataGridView1.RowCount - 2; i++)
            {
                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";
                }
                else
                {
                    try
                    {
                        dataGridView1.Rows[i].Cells[2].Value = Dns.GetHostEntry(ip).HostName;
 
                    }
                    catch { dataGridView1.Rows[i].Cells[2].Value = "n/a"; }
                }
 
                backgroundWorker1.ReportProgress(i+1);
                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)
        {
            MessageBox.Show("Completed");
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (viI != 0 && viI <= 100)
            {
                progressBar1.Value = viI;
            }
            if (viI == 100)
            {
                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;
            }
        }
но при этом возникает один небольшой трабл при выполнении на
C#
1
backgroundWorker1.ReportProgress(i+1);
возникает ошибка "This BackgroundWorker states that it doesn't report progress. Modify WorkerReportsProgress to state that it does report progress."

Добавлено через 27 минут
ответ оказался банально простым у BackgroundWorker есть свойство workerreports progress и его нужно установить в true. может кому-то будет полезно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2013, 17:31
Помогаю со студенческими работами здесь

Подвисание формы при вызове Show()
Есть такая ситуация: загружается главная форма и в событии Shown вызывается другая форма: private void MyForm_Shown(object sender,...

Подвисание формы при копировании файла
Всем дорого времени суток! Есть форма с кнопками &quot;Выбор файла&quot; и &quot;Копирование&quot;. Когда идет процесс копирования с формой...

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

Подвисание формы (математические рассчеты)
Здравствуйте, первый раз пишу на подобного рода форумах, не судите строго) Опыт в программировании мал, пользуюсь C++ Builder 6 ...

Ошибка при сканировании(
МФУ-шник HP LaserJet M1005. Работал отлично. Сейчас печатает, делает ксерокс, но не сканирует. При выборе меню сканирования выдаёт вот...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru