static bool FileExistsTimeout(string path, int millisecondsTimeout) { try { FileExistsDelegate callback = new FileExistsDelegate(File.Exists); IAsyncResult result = callback.BeginInvoke(path, null, null); if (result.AsyncWaitHandle.WaitOne(millisecondsTimeout, false)) { return(callback.EndInvoke(result)); } else { callback.EndInvoke(result); // Needed to terminate thread? return(false); } } catch (Exception ex) { Debug.WriteLine("Error in finding file: " + path + "\r\n" + ex.Message); return(false); } }
static bool FileExistsTimeout(string path, int millisecondsTimeout) { try { FileExistsDelegate callback = new FileExistsDelegate(File.Exists); IAsyncResult result = callback.BeginInvoke(path, null, null); if (result.AsyncWaitHandle.WaitOne(millisecondsTimeout, false)) { return callback.EndInvoke(result); } else { //callback.EndInvoke(result); // Problem: this seems to make the current thread block for response! return false; } } catch (Exception) { return false; } }
/// <summary> /// Конструктор для случая "Save" /// </summary> public SaveLevelCommand(string fileName, GameLevel level) { _fileName = fileName; _level = level; _fileExistsCallback = null; }
/// <summary> /// Конструктор для случая "Save As" /// </summary> /// <param name="fileName">Полное имя файла для сохранения.</param> /// <param name="level">Уровень.</param> /// <param name="fileExitsCallback">Функция обратного вызова для случая, если один из файлов уже существует.</param> public SaveLevelCommand(string fileName, GameLevel level, FileExistsDelegate fileExistsCallback) { _fileName = fileName; _level = level; _fileExistsCallback = fileExistsCallback; }