Проблема с делегатом и вызовом события в C#
Ребята, помогите пожалуйста, если поймете суть вопроса) Есть условие для задачи, часть из которого "установить статус определенного города с помощью вызова ивента, в зависимости от количества его населения, с помощью таймера из System.Timers". Я создала событие, подписала на него каждый город, и установила таймер на 5 секунд, который меняет количество населения в городе. В классе Country есть массив Localities, однако при конвертации города в село (или наоборот) не происходит сохранение в массиве Localities (если >15000 не меняет статус на City, и т.п.)
private EventHandler<CountryEventArgs> _event;
internal event EventHandler<CountryEventArgs> PopulationGrowth
{
add
{
_event += value;
}
remove
{
_event -= value;
}
}
private void TimerHandler(object? sender, ElapsedEventArgs args)
{
int buff = Population;
Random random = new Random();
this.Population += random.Next(-1000, 1000);
if (_event != null)
{
if (buff < 15000 && Population > 15000)
{
_event.Invoke(this, new CountryEventArgs() { IsToCity = true, IsToVillage = false });
}
if (buff > 15000 && Population < 15000)
{
_event.Invoke(this, new CountryEventArgs() { IsToCity = false, IsToVillage = true });
}
else
{
_event.Invoke(this, new CountryEventArgs() { IsToCity = false, IsToVillage = false });
}
}
}
public Village ToVillage()
{
Village village = new Village(Population, LocalityName, "Village");
return village;
}
public City ToCity()
{
City city = new City(Population, LocalityName, "City");
return city;
}
/// <summary>
/// Class constructor.
/// </summary>
/// <param lacalityName = "locality name">Name of Locality</param>
protected Locality(string localityName)
{
_timer = new Timer();
_timer.Interval = 5000;
_timer.Elapsed += TimerHandler;
_timer.Start();
_localityName = localityName;
}
private void CountryHandler(object? sender, CountryEventArgs args)
{
Locality locality = sender as Locality;
/*if (_printCount < _localityIndex + 1)
{
_printCount = 0;
Console.Clear();
}
_printCount++;*/
if (args.IsToCity)
{
for(int i = 0; i < _localityIndex; i++)
{
if (locality.Equals(Localities[i]))
{
locality = locality.ToCity();
Localities[i] = locality;
Console.WriteLine(locality.ToString());
//Console.WriteLine(locality.GetInfrastructure());
return;
}
}
}
if(args.IsToVillage)
{
for (int i = 0; i < _localityIndex; i++)
{
if (locality.Equals(Localities[i]))
{
locality = locality.ToVillage();
Localities[i] = locality;
Console.WriteLine(locality.ToString());
//Console.WriteLine(locality.GetInfrastructure());
return;
}
}
}
else
{
for(int i = 0; i < _localityIndex; i++)
{
if (locality.Equals(Localities[i]))
{
Console.WriteLine(locality.ToString());
//Console.WriteLine(locality.GetInfrastructure());
return;
}
}
}
}