powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ping средствами c#
10 сообщений из 10, страница 1 из 1
Ping средствами c#
    #39576807
Фотография Пылесос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый.

Получаю все данные что нужны по нажатию кнопки:

pingSender.SendAsync(adress, 1000, data, options, resetEvent);

Подскажите пожалуйста, как это реализовать, чтобы постоянно получать данные - по аналогии с ping .... -t?

Нужно сделать некий монитор.

Вот код:
Код: 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.
      private void btnPing_Click(object sender, EventArgs e)
        {
                  SendPing(IPAddress.Parse(IPadres), 1000);     
        }



     private void SendPing(IPAddress txtIP, int timeOut)
        {
            using (System.Net.NetworkInformation.Ping pingSender = new System.Net.NetworkInformation.Ping())
                {
                    pingSender.PingCompleted += new PingCompletedEventHandler(pingSender_Complete);

                    byte[] packetData = Encoding.ASCII.GetBytes("................................");
                    PingOptions packetOptions = new PingOptions(255, false);

                    pingSender.SendAsync(txtIP, timeOut, packetData, packetOptions, resetEvent);
                    pingSender.Dispose();
            }
        }

        private void pingSender_Complete(object sender, PingCompletedEventArgs e)
        {
                if (pingResponse.Status == IPStatus.Success)
                {
                    IPHostEntry hostAdr = Dns.GetHostEntry(pingResponse.Address);

                    sResult = string.Format("{0}  {1}  {6}: {2}, byte={3}, время={5} мс TTL = {4}",
                            DateTime.Now.ToLongTimeString(),
                            pingResponse.Address,
                            pingResponse.Status,
                            "32",
                            pingResponse.Options.Ttl,
                            pingResponse.RoundtripTime,
                            hostAdr.HostName);
                        MessageBox.Show(sResult, "Сообщение"));
                }
        }
...
Рейтинг: 0 / 0
Ping средствами c#
    #39576879
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пылесос,

обернуть в условный цикл типа while, ваш КО.
...
Рейтинг: 0 / 0
Ping средствами c#
    #39576885
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы используйте Using, то строка
pingSender.Dispose();
является избыточной, а в частных случаях может приводить к ошибке, так как вы высвобождаете ресурсы 2 раза подряд, перед выходом из блока Using и при выходе из него. Если класс написан рукожопом, то при повторном Dispose могут и исключения получить
...
Рейтинг: 0 / 0
Ping средствами c#
    #39576966
Фотография Пылесос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesЕсли класс написан рукожопом, то при повторном Dispose могут и исключения получить
...
Рейтинг: 0 / 0
Ping средствами c#
    #39576967
Фотография Пылесос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вопрос то не в этом, а в том, как в цикле пинговать например 100 раз подряд с задержкой в 2 секунды скажем, и при этом чтобы была нормальная перерисовка формы с обновлением данных
...
Рейтинг: 0 / 0
Ping средствами c#
    #39577000
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Пылесос,

Можно таймер использовать
...
Рейтинг: 0 / 0
Ping средствами c#
    #39577422
Фотография Пылесос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Пылесос,

Можно таймер использовать

Сделал по таймеру, стало лучше, однако все равно подвисает форма. Подскажите как сделать чтобы она не зависала?
...
Рейтинг: 0 / 0
Ping средствами c#
    #39577433
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПылесосCat2Пылесос,

Можно таймер использовать

Сделал по таймеру, стало лучше, однако все равно подвисает форма. Подскажите как сделать чтобы она не зависала?

Почему бы не сделать пингобомбёжку в BackgroundWorkere?
...
Рейтинг: 0 / 0
Ping средствами c#
    #39577434
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PingExample
{
    public partial class Form1 : Form
    {
        private Timer _pingTimer;
        private IPAddress _ipAddress;

        public Form1()
        {
            InitializeComponent();
            _pingTimer = new Timer { Interval = 2000 };
            _pingTimer.Tick += Timer_Tick;

        }

        private void UpdateControls()
        {
            IpAddress.Enabled = !_pingTimer.Enabled;
            Start.Enabled = !_pingTimer.Enabled;
            Stop.Enabled = _pingTimer.Enabled;
        }

        private void Start_Click(object sender, EventArgs e)
        {
            _pingTimer.Start();
            _ipAddress = IPAddress.Parse(IpAddress.Text);
            UpdateControls();
        }

        private void Stop_Click(object sender, EventArgs e)
        {
            _pingTimer.Stop();
            UpdateControls();
        }

        private async void Timer_Tick(object sender, EventArgs e)
        {
            await SendPing(_ipAddress, 1000);
        }


        private async Task SendPing(IPAddress txtIP, int timeOut)
        {
            using (Ping pingSender = new Ping())
            {
                byte[] packetData = Encoding.ASCII.GetBytes("................................");
                PingOptions packetOptions = new PingOptions(255, false);
                var result = await pingSender.SendPingAsync(txtIP, timeOut, packetData, packetOptions);
                Status.Text = result.Status.ToString();
            }
        }
    }
}


сделайте нормально через async\await, как то так примерно
...
Рейтинг: 0 / 0
Ping средствами c#
    #39578855
Фотография Пылесос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ping средствами c#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]