参数超出范围异常-网站检查

本文关键字:网站 检查 异常 范围 参数 | 更新日期: 2023-09-27 18:17:59

我正在研究一个应用程序,通过检查是否显示特定的单词来检查网站是否正常运行。在提供的代码,我使图像出现(绿色,如果网站是向上,红色,如果向下),但我必须删除这个图像时,计时器再次检查网站。对于StkPan_Icons.Children.RemoveAt(RefNum);

,我得到以下错误

指定的参数超出有效值范围。

帮忙吗?

private void ClearImageStack(int RefNum)
{
    StkPan_Icons.Children.RemoveAt(RefNum);
}

private void GetSiteAndCompare(int URL_Num)
{
    using (var Client = new WebClient())
    {
        string SiteContent = Client.DownloadString("http://" + UrlArrary[URL_Num]);
        if (SiteContent.Contains(CheckForArray[URL_Num]))
        {
            StkPan_Icons.Children.Insert(URL_Num, GetGreen());
            FailRefArray[URL_Num] = false;
        }
        else
        {
            StkPan_Icons.Children.Insert(URL_Num, GetRed());
            Fail(URL_Num);
        }
    }
}
private void RunCheck()
{
    // Checks all the websites.
    for (int i = 0; i < URLCount; i++)
    {
        ClearImageStack(i);
        GetSiteAndCompare(i);
    }

参数超出范围异常-网站检查

看起来您的循环逻辑对编辑该集合没有意义。考虑一个简单的例子:

for (var i = 0; i < 3; i++)
    someCollection.RemoveAt(i);

如果someCollection最初有3个元素,这段代码将导致错误。它试图对集合执行以下操作:

  1. 删除索引0处的元素(集合现在有2个元素)
  2. 删除索引为1的元素(集合现在有1个元素)
  3. 删除索引2处的元素(错误:collection只有一个元素,没有索引2)

如果你只想清除集合(正如函数名所暗示的那样),那么你不需要循环遍历它的元素。它可能已经有.Clear()函数了。试试这样做:

StkPan_Icons.Children.Clear();
for (int i = 0; i < URLCount; i++)
    GetSiteAndCompare(i);

有几个问题。你需要添加边界检查到ClearImageStack和调用它的方法。例如

private void ClearImageStack(int refNum)
{
    if (StkPan_Icons.Children.Count() <= refNum) // or .Length depending on the type
        StkPan_Icons.Children.RemoveAt(refNum);
    else
        throw new ArgumentException("Really, bitch?")
}

根本原因是URLCount在RunCheck有一个不同的(更高)值比StkPan_Icons.Children.Count()。这让我想知道你为什么不做一些像

private void RunCheck()
{
    // Checks all the websites.
    for (int i = 0; i < StkPan_Icons.Children.Count(); i++)
    {
        ClearImageStack(i);
        GetSiteAndCompare(i);
    }
    UpdateStatus();
}