Зависание интерфейса Winforms
При вызове асинхронного метода парсинга с изменением прогрессбара зависает интерфейс. Ошибку в своем коде не вижу, вроде все должно в отдельном потоке выполняться, но виснет,пока не завершит парсинг. Может проблема в семафоре, который в предыдущем вопросе помог решить проблему?
Код с увеличением текущего значения (объект прогрессбара передается в метод класса и его переорпределенные варианты в наследниках):
public virtual async Task GetData(int index, string url, HttpClient Client,SQLiteDbContext db, List<string> obj, List<string> exceptions, MetroProgressBar progressBar)
{
try
{
ParsingPatientsData? Ppatient = new();
Ppatient = await GetJsonAsync<ParsingPatientsData>($"{url}/{obj[index]}", Client);
Ppatient.PatientPath = $"{url}/{obj[index]}";
Ppatient = ToString(ref Ppatient);
Patients patient = new();
patient = ConvertData(Ppatient, patient);
if(db.Patient.FindAsync(patient.ID).Result==null)
await db.Patient.AddAsync(patient);
progressBar.Value += 1;
}
catch (Exception ex) { progressBar.Value += 1; exceptions.Add($"Ошибка:{ex.InnerException.Message}\nошибка в {url}/{obj[index]}"); }
}
Код увеличивающий максимальное значение прогрессбара (также объект передается в метод класса):
public async Task<int> DataGetter(string url, HttpClient Client, List<string> exceptions, MetroProgressBar progressBar)
{
var DataIDs = await GetJsonAsync<List<string>>(url, Client);
progressBar.Maximum += DataIDs.Count;
Task[] DataTasks = new Task[DataIDs.Count];
using(var db=new SQLiteDbContext())
{
for (var i = 0; i < DataTasks.Length; i++)
{
DataTasks[i] = GetData(i, url, Client,db, DataIDs, exceptions, progressBar);
}
await Task.WhenAll(DataTasks);
await db.SaveChangesAsync();
}
return DataIDs.Count;
}