我正在开发一个应用程序,通过检查是否显示特定单词来检查网站是否已启动。在提供的代码中,我会显示一个图像(如果网站已启动,则为绿色,如果关闭则为红色),但是当计时器再次检查网站时,我必须删除此图像。我对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);
}
答案 0 :(得分:5)
看起来你的循环逻辑对于编辑该集合没有意义。想想一个简化的例子:
for (var i = 0; i < 3; i++)
someCollection.RemoveAt(i);
如果someCollection
最初有3个元素,则此代码将导致错误。它正在尝试对集合执行以下操作:
如果您只想清除集合(如函数名称所暗示的那样),那么您不需要遍历其元素。 可能已经有了.Clear()
函数。尝试这样的事情:
StkPan_Icons.Children.Clear();
for (int i = 0; i < URLCount; i++)
GetSiteAndCompare(i);
答案 1 :(得分:-2)
有几个问题。您需要向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?")
}
根本原因是RunCheck中的URLCount与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();
}