Remy LeBeau gibt hier
https://stackoverflow.com/a/38084347/6517492 einen Hinweis auf die OnReply Methode, diese zu verwenden macht den Code nur unnötig unleserlich. Ping arbeitet synchron, nicht asynchron, das Application.ProcessMessages im Anschluss an Ping macht daher keinen Sinn.
Der Artikel beschreibt auch dass die Anzahl Bytes selbst dann größer Null ist wenn ein Fehler auftritt. Es muss der Status ausgewertet werden, der in ReplyStatus.ReplyStatusType nach dem Ping steht.