Я занимаюсь разработкой небольшого приложения для мониторинга состояния сервера. Я хочу иметь возможность пинговать сервер и показывать статус в приложении 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
, но он всегда вылетает без ошибок.