private void CalculateCacheSizeAsync(Action <long, long> callback) { BeginOnThreadPool(() => { _isCalculating = true; var length1 = 0L; var length2 = 0L; var files = new List <TelegramFileInfo>(); _settings.Clear(); using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { var fileNames = store.GetFileNames(); foreach (var fileName in fileNames) { if (fileName.StartsWith("staticmap")) { } try { var fileInfo = new TelegramFileInfo { Name = fileName }; if (store.FileExists(fileName)) { using (var file = new IsolatedStorageFileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, store)) { fileInfo.Length = file.Length; if (IsValidCacheFileName(fileName)) { if (IsValidPhotoFileName(fileName)) { _settings.PhotosLength += file.Length; } else if (IsValidMusicFileName(fileName)) { _settings.MusicLength += file.Length; } else if (IsValidVideoFileName(fileName)) { _settings.VideoLength += file.Length; } else if (IsValidVoiceMessageFileName(fileName)) { _settings.VoiceMessagesLength += file.Length; } else if (IsValidDocumentFileName(fileName)) { _settings.DocumentsLength += file.Length; } else if (IsValidOtherFileName(fileName)) { _settings.OtherFilesLength += file.Length; } length1 += file.Length; fileInfo.IsValidCacheFileName = true; } } } files.Add(fileInfo); } catch (Exception ex) { TLUtils.WriteException("CalculateCacheSizeAsync OpenFile: " + fileName, ex); } } var directoryNames = store.GetDirectoryNames(); foreach (var fileName in directoryNames) { try { var fileInfo = new TelegramFileInfo { Name = fileName, Length = -1 }; files.Add(fileInfo); } catch (Exception ex) { TLUtils.WriteException("CalculateCacheSizeAsync OpenFile: " + fileName, ex); } } length2 = GetDatabaseLength(store, files); } _isCalculating = false; callback.SafeInvoke(length1, length2); BeginOnUIThread(() => { Files.Clear(); foreach (var file in files) { Files.Add(file); } }); }); }