调用和任务不起作用



我正在用 C# 编写一个程序,我有一个问题,我想从每次循环后不同类的方法更新视图上的标签和进度条。但是,它不是在每个循环之后更新这些控件,而是在方法结束时更新这些控件。如何解决?Task.Run ((( => methodFromOtherClass ((( 根本不起作用,当我使用 Invoke.Dispatcher 并将控件作为参数传递给方法时,更新仅在方法结束时进行,而不是在每个循环之后进行。

private void buttonStart_Click(object sender, RoutedEventArgs e)
{
FindDocument findDocument = new FindDocument(labelCurrentNumber, progressBar1);
cProgress<int> progress = new Progress<int>();
progress.ProgressChanged += (p, value) => { progressBar1.Value = value; labelCurrentNumber.Content = value.ToString(); };
//Task.Run(() => findDocument.Find(csvRows, mode, (int)slider.Value, 1, check, progress, outputFileCsv));
findDocument.Find(csvRows, mode, (int)slider.Value, 1, 1, progress, outputFileCsv);
}

以上是视图中的代码。

public int Find(List<CsvModel> csvRows, SearchMode PageMode, int PageMargin, double sensitivity, int pageInfo, IProgress<int> progress, string outPath)
{
csvContent.AppendLine("sep=,");
csvContent.AppendLine("Lp,Plik wejściowy, Plik wyjściowy, Wynik");
foreach (CsvModel csv in csvRows)
{
progressReport++;
progress.Report(progressReport);
lab.Dispatcher.InvokeAsync(() => lab.Content = progressReport.ToString());
this.lab.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => lab.Content = progressReport));
}
File.WriteAllText(outPath + @"dane.csv", csvContent.ToString());
logger.Info($"Zakończono przetwarzanie obrazu");
return 0;
}

上面是来自另一个类的代码,该方法作为参数控件给出。 我做错了什么?

如果同步运行此内容(就像当前一样(,则 UI 将被阻止,直到方法结束,因此您看不到进度更改。

如果您使用 Task,您可能会收到错误,因为我认为progress.ProgressChanged线程不安全。在报告进度( progress.Report(progressReport);)或事件本身时,可以使用Dispatcher.InvokeContorl.Invoke(progressBar1.Value = value; labelCurrentNumber.Content = value.ToString();)

相关内容

最新更新