首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stack.Overflow错误- WinForms应用与WinService

Stack.Overflow错误- WinForms应用与WinService
EN

Stack Overflow用户
提问于 2009-10-27 05:59:35
回答 4查看 157关注 0票数 0

我有一个小的代码示例:

代码语言:javascript
复制
private void MonitorItems()
        {
            if (someCondition)
            {
                dateSelected = DateTime.Now;
                GetAllItems();
            }
            else
            {
                if(allItems.Count>0)
                    CheckAllItems();
            }
            MonitorItems();
        }

GetAllItems方法转到DB并获取集合-> allItems的所有新项。然后,使用CheckAllItems方法:

代码语言:javascript
复制
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。

这种类型的代码在WinFormsApp中抛出Stack.Overflow异常。我有两个问题:

  1. 这种类型的异常是否会在使用相同代码的WinService应用程序中抛出?
  2. 您对使用计时器而不是自调用方法有何看法?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-27 06:08:57

“自调用方法”更准确的叫法是"recursive method"。你的解决方案很有创意,我承认这一点。但不要这么做。堆栈空间非常有限。当你转向一个服务时,你会看到这个问题,而且有更好的方法来处理这个问题。在服务中使用计时器是非常合适的。

票数 1
EN

Stack Overflow用户

发布于 2009-10-27 06:09:07

在你的例子中,递归调用这个方法就像使用一个定时器来做一样糟糕的。你不应该这样做!!

只需使用一个简单的循环,并在两者之间发送线程休眠一段时间。

票数 1
EN

Stack Overflow用户

发布于 2009-10-27 06:11:22

MS IL具有.tail操作码。但是c#点想要识别尾递归(.顺便说一句,尾递归在.net中非常慢((

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1627575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档