Пинг сервера прерывает поток в Eto.Forms - PullRequest
0 голосов
/ 19 марта 2020

Я занимаюсь разработкой небольшого приложения для мониторинга состояния сервера. Я хочу иметь возможность пинговать сервер и показывать статус в приложении Eto.Forms.

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

Это моя команда ping, которая является методом класса. Я могу использовать это и получить ожидаемые результаты.

public bool Ping()
{
    bool pingable = false;
    Ping pinger = null;

    try
    {
        pinger = new Ping();
        PingReply reply = pinger.Send(Address);
        pingable = reply.Status == IPStatus.Success;
    }
    catch (Exception)
    {
        return false;
    }
    finally
    {
        if (pinger != null) pinger.Dispose();
    }

    return pingable;
}

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

new Thread(() =>
{
    foreach (KeyValuePair<string, Node> item in nodes)
    {
        // ...
        bool isOnline = node.Ping(); // not used right now
        xamlNodes.Rows.Add(row);
    }
}).Start();

Если я переключусь bool isOnline = node.Ping(); и xamlNodes.Rows.Add(row); первая строка добавлена, а остальные нет. Если я удаляю bool isOnline = node.Ping();, все строки добавляются.

Я пытался реализовать Application.Instance.Invoke, но он всегда вылетает без ошибок.

...