我有一个带有进度条的 C# wpf 项目。 我试图在线程操作期间更新进度条,但没有任何反应。 使用调度程序应该可以完成这项工作,但它不起作用。 这是示例代码: 非常感谢!
private async void search(string[] files)
{
progressBar.Maximum = files.Length;
List<System.Threading.Tasks.Task> searchTasks = new List<System.Threading.Tasks.Task>();
foreach (string file in files)
{
searchTasks.Add(Task.Run(() =>
{
this.Dispatcher.Invoke(() =>
{
progressBar.Value = progressBar.Value + 1;
File.ReadAllLines(file);
//do somthing with the lines
});
}));
}
await System.Threading.Tasks.Task.WhenAll(searchTasks);
progressBar.Value = 0;
}
您的实现问题是您正在尝试运行任务列表。执行任务时,所有任务都会在线程池上同时运行。
因此,您的所有任务可能会同时执行,并且很快就会完成。
您看不到 UI 进度条更新的原因是 UI 线程本身正在读取文件,这会挂起您的 Ui。在所有任务完成之前,UI 不会更新。当所有任务完成后,您将再次将该值设置为 0。因此用户无法观察到。
你可以尝试什么:
foreach (string file in files)
{
searchTasks.Add(Task.Run(() =>
{
this.Dispatcher.Invoke(() =>
{
progressBar.Value = progressBar.Value + 1;
});
File.ReadAllLines(file);
//do somthing with the lines
}));
}