private void Window_Loaded(object sender, RoutedEventArgs e) { prgPreloader.Visibility = Visibility.Visible; bool isAbsolute = _proxy.CheckAbsolute(book, ServerData.Book) == true ? true : false; string booksPath = _proxy.GetItemProperty(book, ServerData.Book, PropertyData.Path); txtName.Text = _proxy.GetItemProperty(book, ServerData.Book, PropertyData.Name); string path = isAbsolute ? booksPath : $@"Temp\Books\{booksPath}"; if (!isAbsolute) { if (!Directory.Exists(@"Temp\Books")) { Directory.CreateDirectory(@"Temp\Books"); } byte[] res = _proxy.DownloadAsync(booksPath, FilesType.Books).Result; if (res != null) { using (FileStream fs = File.OpenWrite(path)) { Task.WaitAll(fs.WriteAsync(res, 0, res.Length)); fs.Dispose(); } } } if (!File.Exists(path)) { MessageBox.Show($"This file does not exist!\n({path})", "Wrong", MessageBoxButton.OK, MessageBoxImage.Error); Close(); return; } string data = ""; if (System.IO.Path.GetExtension(path) == ".epub") { EpubBook book = EpubReader.Read(path); data = book.ToPlainText(); } else if (System.IO.Path.GetExtension(path) == ".pdf") { PdfReader reader = new PdfReader(path); string text = string.Empty; for (int page = 1; page <= reader.NumberOfPages; page++) { text += PdfTextExtractor.GetTextFromPage(reader, page); } reader.Close(); data = text; } else { using (FileStream fs = new FileStream(path, FileMode.Open)) { using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { data = sr.ReadToEndAsync().Result; sr.Dispose(); } } } Thread thd = new Thread(new ThreadStart(() => { _words.AddRange(data.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries)); Dispatcher.InvokeAsync(new Action(() => { foreach (string item in _words) { _totalWords += item.Split(" \\/=+-/^@$%{}|&\n\r\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length; } _max = (_totalWords / _maxWordsPerPage) + 1; txtMax.Text = $"of {_max}"; slPages.Maximum = _max; int?bm = _proxy.GetLastMarkAsync(book, user, ServerData.Book).Result; if (bm != null) { txtPage.Text = _proxy.GetItemProperty(Convert.ToInt32(bm), ServerData.Bookmark, PropertyData.Position); ChangePage(Convert.ToInt32(txtPage.Text)); } else { ChangePage(1); } if (Convert.ToInt32(txtPage.Text) == _max) { btnLast.IsEnabled = btnNext.IsEnabled = false; slPages.IsEnabled = false; } prgPreloader.Visibility = Visibility.Collapsed; })); })) { IsBackground = true }; thd.Start(); }