асинхронное выполнение пинга

193
08 января 2019, 08:30

Пробую так:

    private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < dataGridView1.RowCount - 1; i++)
        {
            Task<IPStatus> t = ping(dataGridView1[0, i].Value.ToString());
            t.Wait();
            dataGridView1[1, i].Value = t.Result;
        }
    }
    async Task<IPStatus> ping(string address)
    {
        IPAddress IP = null;
        IPAddress.TryParse(address,out IP);
        PingReply pr = await new Ping().SendPingAsync(IP);
        return pr.Status;
    }

Отладка становиться на функции SendPingAsync(IP) и она выполняется до бесконечности. В чем может быть причина?

Answer 1

У вас дедлок, так как асинхронный метод ждет сам себя и не может вернуться в UI поток. Попробуйте так:

private async void button1_Click(object sender, EventArgs e)
{
    for (int i = 0; i < dataGridView1.RowCount - 1; i++)
    {
        IPStatus t = await ping(dataGridView1[0, i].Value.ToString());
        dataGridView1[1, i].Value = t;
    }
}
async Task<IPStatus> ping(string address)
{
    IPAddress IP = null;
    IPAddress.TryParse(address,out IP);
    PingReply pr = await new Ping().SendPingAsync(IP);
    return pr.Status;
}
READ ALSO
с# чет не понятное для меня с потоками

с# чет не понятное для меня с потоками

RowCount = 2Каким образом в dataGridView1[0, i]

171
anglesharp специфичное id input элемента

anglesharp специфичное id input элемента

Возник вопрос, как использовать следующую конструкцию для входа на сайт

176
Ошибка доступа к ветке реестра (создание параметра)

Ошибка доступа к ветке реестра (создание параметра)

Помогите пожалуйста разобраться, почему не создается параметр в реестре (только на моем компьютере)Создаю параметр из программы на C# (запуск...

155
Работа с классом из внутри

Работа с классом из внутри

У меня есть класс скажем A (основной класс) и в нем список объектов класса BСразу после создания класса B(его экземпляра) мне нужно добавить...

153