С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 01.09.2016
Сообщений: 14

Почему зависает форма при работе консольного приложения?

25.01.2017, 10:20. Показов 1474. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть консольное приложение
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace ConsoleApplication3
{
    class Program
    {
        
        static void Main(string[] args)
        {
            System.Net.NetworkInformation.Ping ping =
            new System.Net.NetworkInformation.Ping();
            System.Net.NetworkInformation.PingReply pingReply = ping.Send("www.yad.ru");
            
            String Stat = "" + pingReply.Status;
            if (Stat == "TimedOut")
            {
                Form f2 = new Form1();
                f2.Show();
            }
            else
            {
                Application.Exit();
            }
             
 
            Console.ReadKey(true);
        }
    }
}
Если Таймаут открывается форма с собщением, что нужно сделать.
При открытии данной формы, форма зависает, и ни текст ни кнопки на ней не работают.
Что сделано не так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.01.2017, 10:20
Ответы с готовыми решениями:

Как выводить на странице отчет о работе консольного приложения?
Мое консольное приложение ищет в базе. Я его запускаю из web-приложения, передавая строку через форму. После вывожу найденную инфу, читая...

комп зависает намертво при работе с новым винчестером, после перезагрузки компа зависает при загрузке BIOS
купил новый винчестер. комп стал зависать намертво. при перезагрузке, зависает уже при загрузке на заставке выбора выхода в BIOS (Press DEL...

Почему C# создает 7 потоков для консольного приложения
Меня обескуражело что следующий код консольного приложения создал 7 потоков, целых семь штук! class Program { static...

5
Эксперт .NET
 Аватар для Usaga
14111 / 9328 / 1349
Регистрация: 21.01.2016
Сообщений: 35,032
25.01.2017, 10:23
Raiin, нужно использовать проект Windows Forms, а не консольного приложения.
0
-15 / 10 / 6
Регистрация: 03.10.2012
Сообщений: 532
25.01.2017, 10:45
берете вы выводите форму в отдельный поток.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static void Main(string[] args)
        {
            System.Net.NetworkInformation.Ping ping =
            new System.Net.NetworkInformation.Ping();
            System.Net.NetworkInformation.PingReply pingReply = ping.Send("www.yad.ru");
            
            String Stat = "" + pingReply.Status;
            if (Stat == "TimedOut")
            {
                System.Threading.ThreadPool.QueueUserWorkItem(_=> {
                    Form f2 = new Form1();
                    f2.Show();
                });
            }
            else
            {
                Application.Exit();
            }
             
 
            Console.ReadKey(true);
        }
Только вот из потока в поток в форме лучше не работать. Используйте для этого делегаты на события. Делегат это вроде типа данных для эвента.
C#
1
2
3
4
5
6
7
8
9
10
11
12
delegate void Handler_OnTimeOut(bool isOk);
event Handler_OnTimeOut OnTimeOut;
 
//Далее при запуске приложения подключаете событие следующим образом:
OnTimeOut += Event_OnTimeOut;
//И также для такого подключения - должна быть создана функция в соотвествии с делегатом который юзает евент
void Event_OnTimeOut(bool isOk) {
//Данная функция будет вызвана при использовании события
}
 
//Ну а в месте где и определяется timeout - вы пишите вызов события
Event_OnTimeOut?.Invoke(field_bool); //field_bool - это значение true или false ну или переменная типа bool
и вот так вешать многие вещи на события. Не фанатично их создавать, но там где нужно не вызывать а просто вызывать исполнение чегото последействия. Типа действий OnConnected или OnDisconnected - лучше создавать события. таким образом в другом независимом месте вы можете не одну функцию повесть на сие событие. Тобишь Функции не будут вызываться на примую и вам нужно знать когда фунцию вызвать. А вы лишь вызываете событие. А далее функции которые цеплялись ранее к событию сами отработаются не задерживая поток. И не важно в каком они потоке.
0
Эксперт .NET
 Аватар для Usaga
14111 / 9328 / 1349
Регистрация: 21.01.2016
Сообщений: 35,032
25.01.2017, 10:49
SkoTi, ты зачем такую пакость человеку советуешь? Нужен нормальный тип проекта, с циклом обработки событий и всё в основном потоке, без этих ваших... ну ты понял.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
25.01.2017, 11:00
Raiin, нужно отображать форму через метод Application.Run.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Ping ping = new Ping();
            PingReply pingReply = ping.Send("www.yad.ru");
            if (pingReply == IPStatus.TimedOut)
            {
                Application.Run(new Form1());
            }
        }
    }
}
Обрати также внимание что для сравнения enum-ов не нужно выполнять приведение к строке.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
25.01.2017, 17:48
Ещё желательно методу Main назначать атрибут STAThread:
C#
1
2
[STAThread]
static void Main(string[] args)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2017, 17:48
Помогаю со студенческими работами здесь

Почему зависает форма после отработки делегата?
Здравствуйте. Такая проблема. У меня есть делегат, который вызывает метод, который заполняет DataGridView, отрисовывает, а потом выдается...

Ошибка при создании консольного приложения
Всем привет! Нужно в кротчайшие сроки нахвататься азов в C#. Смотрю это...

Ошибки при отладке консольного приложения
Информация о сотрудниках фирмы включает ФИО, табельный номер, количество отработанных часов за месяц, почасовой тариф. Рабочее время свыше...

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

Ошибка при создании консольного приложения
при создании консольного проекта на C# в 10 студии когда создал и пытаюсь открыть файл с кодом происходит ошибка с таким текстом...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru