与之前的字符串相比让我陷入了循环
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()
方法似乎没有做任何需要再次做的事情。
好的,所以我有一个程序可以通过比较某个字符串与我用作参考的 "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()
方法似乎没有做任何需要再次做的事情。