Мне нужно проверить, существует ли файл, и мне нужно сделать это из нескольких мест в коде.
В некоторых местах я могу справиться с обратным вызовом (довольно уродливо, но это будет работать). Но тот, который я не знаю, как обращаться, кажется, требует, чтобы это было Синхронным.
Мне нужно вызвать метод, чтобы проверить, существует ли он из RelayCommand как метод "canExecute".
Любые идеи о том, как справиться с этим?
Это то, что у меня сейчас есть, но вызов .WaitOne в потоке пользовательского интерфейса блокирует фоновый рабочий, поэтому он полностью блокирует приложение.
private bool FileExists(Uri file)
{
var exists = false;
ManualResetEvent resetEvent = new ManualResetEvent(false);
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (s, e) =>{
WebRequest request = HttpWebRequest.Create(file);
request.Method = "HEAD"; //only request the head so its quick
request.BeginGetResponse(result =>
{
try
{
//var response = request.EndGetResponse(result);
var req = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
exists = (response.StatusCode.ToString() == "OK");
}
catch
{
exists = false;
}
resetEvent.Set();
}
, request);
};
worker.RunWorkerAsync();
resetEvent.WaitOne();
return exists;
}