与之前的字符串相比让我陷入了循环

Comparing to previous string gets me stuck in a loop

好的,所以我有一个程序可以通过比较某个字符串与我用作参考的 "temp" 字符串来检查是否有新用户关注频道时的抽搐 url。但是,不是每次字符串不同时只输出一条消息,而是陷入一个循环,输出最新的关注者,然后是第二个最新的关注者,然后再次输出最新的关注者,等等。

我错过了什么?另外,有没有更好的方法来检查某个字符串是否已更新?

        private void DonationListen()
    {
        try
        {
            followers = this.donationClient.DownloadString("https://api.twitch.tv/kraken/channels/" + channel.Trim() + "/follows");

            donationTimer.Interval = 10000;
            donationTimer.Elapsed += new ElapsedEventHandler(CheckUpdates);
            donationTimer.Start();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }

    private void CheckUpdates(object source, ElapsedEventArgs e)
    {
        donationTimer.Stop();

        int startIndex = followers.IndexOf("display_name\":") + 15;
        int endIndex = followers.IndexOf(",\"logo", startIndex);
        prevFollower = followers.Substring(startIndex, (endIndex - 1) - startIndex);

        if (firstRun == true)
        {
            temp = prevFollower;
        }
        else if (prevFollower != temp)
        {
            //New follower detected
            temp = prevFollower;
            if (updateFollower != null)
            {
                updateFollower(prevFollower);
            }
        }
        else
        {
            //Follower is the same as before
        }

        firstRun = false;
        DonationListen();
    }

我认为这可能与尝试从 url 获取新字符串的下载字符串有关,但由于当前正在更新而失败,因此 CheckUpdates 没有正确的信息或其他内容?

没有好的代码示例,很难确定问题出在哪里。所以我们只剩下检查您向我们展示的代码了。

基于此,在我看来,您的 "loop" 似乎是由重复订阅同一事件引起的。

在您的 DonationListen() 方法中,您有以下语句:

donationTimer.Elapsed += new ElapsedEventHandler(CheckUpdates);

CheckUpdates() 方法(即您正在订阅的处理程序)中,您有这条语句(作为最后一条语句):

DonationListen();

换句话说,每次引发计时器的 Elapsed 事件时,您都会向该事件添加另一个事件处理程序实例。对于您添加的每个处理程序,将调用 CheckUpdates() 方法。

同样,如果没有好的代码示例,就很难确定最佳解决方案是什么。但是考虑到这里的代码,在我看来,您可以从 CheckUpdates() 方法中删除最后一条语句,因为 DonationListen() 方法似乎没有做任何需要再次做的事情。