Почему метод ReadPlanAsync выполняется 2 раза?
Почему метод ReadPlanAsync выполняется 2 раза в WPF application Net 5? Я не могу понять, почему это происходит.
public MainWindow()
{
_ = ReadCustomerAsync().ContinueWith(t =>
ReadPlanAsync(),TaskContinuationOptions.ExecuteSynchronously);
}
private async Task ReadCustomerAsync()
{
//obj указать предикат для поиска
VisibilityProgressBar = Visibility.Visible;
await Task.Run(() =>
{
ReadCustomer();
}).ContinueWith(t =>
{
VisibilityProgressBar = Visibility.Hidden;
OnPropertyChanged(nameof(StatusText));
});
}
private async Task ReadPlanAsync(string text = null)
{
//obj указать предикат для поиска
if (SelectedCustomer == null || SelectedYear == default(Data))
return;
VisibilityProgressBar = Visibility.Visible;
StatusText = string.Empty;
SetNormalFontWeights();
await Task.Run(() =>
{
ReadPlan(text);
})
.ContinueWith(task =>
{
if (Jobs.Count > 0)
SetCurrentData();
VisibilityProgressBar = Visibility.Hidden;
OnPropertyChanged(nameof(StatusText));
});
}
private void ReadCustomer()
{
try
{
StatusText = string.Empty;
using DbProjectsContext dbContext = new();
var customers = dbContext.Customers?.OrderBy(o => o.Id)
?.DistinctBy(d => d.Name)
?.ToList();
Customers = new ObservableCollection<Customers>(customers);
SelectedCustomer = customers.FirstOrDefault();
StatusText = Customers.Count > 0 ? "Данные прочитаны из БД!" : "Нет данных!";
}
catch (Exception exc)
{
StatusText = "Ошибка при чтении данных из БД!" + exc.Message;
}
finally { }
}
private void ReadPlan(string text = null)
{
try
{
using DbProjectsContext dbContext = new();
Func<Jobs, bool> func = null;
if (!string.IsNullOrWhiteSpace(text))
{
var textSplit = text.Split('%', StringSplitOptions.RemoveEmptyEntries);
if (textSplit.Count() == 1)
{
text = text.ToLower().Trim();
func = f => !string.IsNullOrEmpty(f.Name) && f.Name.ToLower().Trim().Contains(text) ||
(!string.IsNullOrEmpty(f.ProjectCode) &&
f.ProjectCode.ToLower().Trim().Contains(text));
}
else if (textSplit.Count() == 2)
{
var nameStr = textSplit.FirstOrDefault();
var codeStr = textSplit.LastOrDefault();
var _name = nameStr.ToLower().Trim();
var _code = codeStr.ToLower().Trim();
func = f => !string.IsNullOrEmpty(f.Name) && !string.IsNullOrEmpty(f.ProjectCode) &&
(f.Name.ToLower().Trim().Contains(_name) ||
f.ProjectCode.ToLower().Trim().Contains(_code));
}
else
{
func = f => true;
}
}
else
{
func = f => true;
}
var jobs = dbContext.Jobs.Include(i => i.Parent)
.Include(i => i.Customer)
?.Where(w => w.Date.Year == SelectedYear.DateTime.Year && w.CustomerId == SelectedCustomer.Id)
?.Where(func)
?.OrderBy(o => o.OrderNumber)
?.ToList();
FindChilds(jobs);
Jobs = new ObservableCollection<Jobs>(jobs);
StatusText = Jobs.Count > 0 ? "Данные прочитаны из БД!" : "Нет данных!";
}
catch (Exception exc)
{
StatusText = "Ошибка при чтении данных из БД!" + exc.Message;
}
finally { }
}