我有一个小代码示例:
private void MonitorItems()
{
if (someCondition)
{
dateSelected = DateTime.Now;
GetAllItems();
}
else
{
if(allItems.Count>0)
CheckAllItems();
}
MonitorItems();
}
GetAllItems 方法进入 DB 并获取集合的所有新项目 -> 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 中),我需要转到数据库,进行一些更新,然后通过调用 GetAllItems 方法再次填充集合 allItems。
此类代码在 WinFormsApp 中引发 Stack.Overflow 异常。我有两个问题:
1. 这种类型的异常是否会在 WinService 应用程序中抛出,使用相同的代码?
2.您对使用定时器代替自调用方法有何看法?