У меня есть небольшой пример кода:
private void MonitorItems()
{
if (someCondition)
{
dateSelected = DateTime.Now;
GetAllItems();
}
else
{
if(allItems.Count>0)
CheckAllItems();
}
MonitorItems();
}
Метод GetAllItems отправляется в БД и получает все новые элементы для коллекции -> allItems.
Затем метод CheckAllItems:
private void CheckAllItems()
{
foreach (Item a in new List<Item>(allItems))
{
switch (a.Status)
{
case 1:
HandleStatus1();
break;
case 2:
HandleStatus2(a);
break;
case 0:
HandleStatus0(a);
break;
default:
break;
}
}
}
В некоторых случаях (в HandleStatus1 и HandleStatus2) мне нужно перейти в БД, сделать некоторые обновления, а затем снова заполнить коллекцию allItems вызовом метода GetAllItems.
Этот тип кода вызывает исключение Stack.Overflow в WinFormsApp.
У меня два вопроса:
1. Будет ли этот тип исключения генерироваться в приложении WinService, используя тот же код?
2. Каково ваше мнение об использовании таймеров вместо метода самостоятельного вызова?