private void GeneratePreview(bool setText) { if (_subtitle == null) { return; } _abort = false; int numberOfThreads = 3; var threadPool = new List <BackgroundWorker>(); for (int i = 0; i < numberOfThreads; i++) { var bw = new BackgroundWorker(); bw.DoWork += OnBwOnDoWork; bw.RunWorkerCompleted += OnBwRunWorkerCompleted; threadPool.Add(bw); } for (int index = 0; index < _subtitle.Paragraphs.Count; index++) { Paragraph p = _subtitle.Paragraphs[index]; var before = p.Text; var after = string.Empty; if (setText) { var arg = new BackgroundWorkerParameter { P = p, Index = index, Log = new StringBuilder() }; threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg); while (threadPool.All(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } } else { AddToListView(p, before, after); } if (_abort) { _abort = false; return; } } while (threadPool.Any(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } foreach (var backgroundWorker in threadPool) { backgroundWorker.Dispose(); } }
private void CacheForward(int index, BackgroundWorker bw) { if (!bw.IsBusy && index + 1 < _subtitle.Paragraphs.Count) { var p2 = _subtitle.Paragraphs[index]; var parameter = new BackgroundWorkerParameter { Text = p2.Text, Indexes = new List <int> { index }, Log = new StringBuilder() }; bw.RunWorkerAsync(parameter); } }
private void GeneratePreview(bool setText) { // const int max = 90; // DeepL uses max 90 chars at a time if (_subtitle == null) { return; } try { _abort = false; int numberOfThreads = 4; var threadPool = new List <BackgroundWorker>(); for (int i = 0; i < numberOfThreads; i++) { var bw = new BackgroundWorker(); bw.DoWork += OnBwOnDoWork; bw.RunWorkerCompleted += OnBwRunWorkerCompleted; threadPool.Add(bw); } var textToTranslate = new StringBuilder(); var indexesToTranslate = new List <int>(); int start = 0; if (listView1.SelectedItems.Count > 0) { start = listView1.SelectedItems[0].Index; } for (int index = start; index < _subtitle.Paragraphs.Count; index++) { if (index < listView1.Items.Count) { var listViewItem = listView1.Items[index]; if (!string.IsNullOrWhiteSpace(listViewItem.SubItems[2].Text)) { if (progressBar1.Value < progressBar1.Maximum) { progressBar1.Value++; } continue; } } Paragraph p = _subtitleOriginal.Paragraphs[index]; string text = SetFormattingTypeAndSplitting(index, p.Text, (comboBoxLanguageFrom.SelectedItem as TranslationLanguage).Code.StartsWith("ZH")); var before = text; var after = string.Empty; if (setText) { //if (text.Length + textToTranslate.Length > max) - max is too low for merging texts to really have any effect { var arg = new BackgroundWorkerParameter { Text = textToTranslate.ToString().TrimEnd().TrimEnd('*').TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder() }; textToTranslate = new StringBuilder(); indexesToTranslate = new List <int>(); threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg); while (threadPool.All(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } } textToTranslate.AppendLine(text); textToTranslate.AppendLine(ParagraphSplitter); indexesToTranslate.Add(index); } else { AddToListView(p, before, after); } if (_abort) { _abort = false; _exit = true; return; } if (_tooManyRequests) { _tooManyRequests = false; _exit = true; MessageBox.Show("DeepL returned 'Too many requests' - please wait a while!"); return; } } if (textToTranslate.Length > 0) { while (threadPool.All(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } var arg = new BackgroundWorkerParameter { Text = textToTranslate.ToString().TrimEnd().TrimEnd('*').TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder() }; threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg); } while (threadPool.Any(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } try { foreach (var backgroundWorker in threadPool) { backgroundWorker.Dispose(); } } catch { } } catch (Exception exception) { MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace); } }
private void CheckGrammar() { if (_subtitle == null) { return; } try { int numberOfThreads = 1; var threadPool = new List <BackgroundWorker>(); for (int i = 0; i < numberOfThreads; i++) { var bw = new BackgroundWorker(); bw.DoWork += OnBwOnDoWork; bw.RunWorkerCompleted += OnBwRunWorkerCompleted; threadPool.Add(bw); } var textToTranslate = new StringBuilder(); var indexesToTranslate = new List <int>(); int start = 0; if (listView1.SelectedItems.Count > 0) { start = listView1.SelectedItems[0].Index; } for (int index = start; index < _subtitle.Paragraphs.Count; index++) { Paragraph p = _subtitle.Paragraphs[index]; var arg = new BackgroundWorkerParameter { Text = textToTranslate.ToString().TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder() }; textToTranslate = new StringBuilder(); indexesToTranslate = new List <int>(); threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg); // add some multi threading CacheForward(index + 2, _bw2); CacheForward(index + 4, _bw3); CacheForward(index + 6, _bw4); while (threadPool.All(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } textToTranslate.AppendLine(p.Text); indexesToTranslate.Add(index); if (_abort) { return; } } if (textToTranslate.Length > 0) { while (threadPool.All(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } var arg = new BackgroundWorkerParameter { Text = textToTranslate.ToString().TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder() }; threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg); } while (threadPool.Any(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } try { foreach (var backgroundWorker in threadPool) { backgroundWorker.Dispose(); } } catch { } } catch (Exception exception) { MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace); } }
private void GeneratePreview(bool setText) { if (_subtitle == null) { return; } try { _abort = false; int numberOfThreads = 4; var threadPool = new List <BackgroundWorker>(); for (int i = 0; i < numberOfThreads; i++) { var bw = new BackgroundWorker(); bw.DoWork += OnBwOnDoWork; bw.RunWorkerCompleted += OnBwRunWorkerCompleted; threadPool.Add(bw); } var textToTranslate = new StringBuilder(); var indexesToTranslate = new List <int>(); for (int index = 0; index < _subtitle.Paragraphs.Count; index++) { Paragraph p = _subtitle.Paragraphs[index]; string text = SetFormattingTypeAndSplitting(index, p.Text, (comboBoxLanguageFrom.SelectedItem as TranslationPair).Code.StartsWith("ZH", StringComparison.OrdinalIgnoreCase)); var before = text; var after = string.Empty; if (setText) { //if (text.Length + textToTranslate.Length > max) - max is too low for merging texts to really have any effect { var arg = new BackgroundWorkerParameter { Text = textToTranslate.ToString().TrimEnd().TrimEnd(ParagraphSplitter).TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder() }; textToTranslate = new StringBuilder(); indexesToTranslate = new List <int>(); threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg); while (threadPool.All(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } } textToTranslate.AppendLine(text); textToTranslate.AppendLine(ParagraphSplitter.ToString()); indexesToTranslate.Add(index); } else { AddToListView(p, before, after); } if (_abort) { _abort = false; return; } } if (textToTranslate.Length > 0) { while (threadPool.All(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } var arg = new BackgroundWorkerParameter { Text = textToTranslate.ToString().TrimEnd().TrimEnd(ParagraphSplitter).TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder() }; threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg); } while (threadPool.Any(bw => bw.IsBusy)) { Application.DoEvents(); System.Threading.Thread.Sleep(100); } try { foreach (var backgroundWorker in threadPool) { backgroundWorker.Dispose(); } } catch { } } catch (Exception exception) { MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace); } }