Я работаю над унаследованным приложением, которое взаимодействует с внешним компьютером, и связь осуществляется через файл.В основном машина A записывает файл, B получает его и отвечает другим файлом.В настоящее время все работает нормально, но у меня есть код, который вызывается каждые 5 секунд, который проверяет, существует ли удаленный каталог (где записаны файлы) или нет.Tihs - это код:
private delegate bool DirectoryExistsDelegate(string folder);
public static bool DirectoryExists(string path, int timeout = 2000)
{
Func<bool> func = () => Directory.Exists(path);
Task<bool> task = new Task<bool>(func);
task.Start();
return task.Wait(timeout) && task.Result;
}
Похоже, что приведенный выше метод заморозил пользовательский интерфейс, особенно когда мы используем общий сетевой ресурс, например \\ 10.100.100.1 \ sharedFolder Так что яМысль пинговать хост, прежде чем пытаться получить доступ:
private static IPStatus PingStatus;
public static async void PingIP(string IPaddress, int timeout = 2000)
{
// Verifica indirizzo IP
if (string.IsNullOrEmpty(IPaddress)) return;
Ping s = new Ping();
PingStatus = await s.SendPingAsync(IPaddress, timeout).ContinueWith(pingTask => pingTask.Result.Status);
}
private delegate bool DirectoryExistsDelegate(string folder);
public static bool DirectoryExists(string path, int timeout = 2000)
{
if (path.StartsWith("\\"))
{
string[] address = path.Split('\\');
PingIP(address[2], timeout);
if (PingStatus != IPStatus.Success) return false;
}
Func<bool> func = () => Directory.Exists(path);
Task<bool> task = new Task<bool>(func);
task.Start();
return task.Wait(timeout) && task.Result;
}
Я называю основной метод следующим образом:
if (!Uti.DirectoryExists(PathCom.Value, 5000))
return false;
Я не знаю, верна ли идея или нет, но логически правильно яУгадай.Проблема в том, что PingStatus всегда возвращает True (при первом вызове), если сервер не существует, так как второй, кажется, работает нормально.Как разрешить SendPingAsync дождаться результата проверки связи и не заморозить интерфейс?