gpt4 book ai didi

c# - 需要 'System.IndexOutOfRangeException'解决方案

转载 作者:太空宇宙 更新时间:2023-11-03 19:12:22 24 4
gpt4 key购买 nike

if (Int32.Parse(strTotals) == 0 && nTotalCount != 0)
{
nTotalCount = 0;
for (int j = 0; j < 66; j++)
{
if (GameHistoryPicBox1[j].InvokeRequired)
{
GameHistoryPicBox1[j].BeginInvoke(new MethodInvoker(() =>
{
if ((j + j / 6) % 2 == 0)
GameHistoryPicBox1[j].Image = Properties.Resources.al1; // Line2
else
GameHistoryPicBox1[j].Image = Properties.Resources.al2; // Line4
}));
}
else
{
if ((j + j / 6) % 2 == 0)
GameHistoryPicBox1[j].Image = Properties.Resources.al1;
else
GameHistoryPicBox1[j].Image = Properties.Resources.al2;
}
}
}

我一直在使用线程检查 nTotalCount 值。

如果nTotalCount 为零,那么我必须清理所有游戏图片框图像。

所以我实现了上面的代码。

不幸的是,我得到了错误:

An unhandled exception of type 'System.IndexOutOfRangeException'

在 2 号线和 4 号线上。

j 的值为 66

j 的值可能是 66 吗?

最佳答案

这是因为闭包的工作原理。您正在创建并传递给 MethodInvoker 的 lambda 表达式通过引用引用了 j 变量。因此,当这段代码正在执行时(几乎可以在任何时候执行,因为它是异步的),j 变量可以具有从 066< 的任何值。循环结束后可以是66

一个快速的解决方法是复制j:

int index = j;
GameHistoryPicBox1[index].BeginInvoke(new MethodInvoker(() =>
{
if ((index + index / 6) % 2 == 0)
GameHistoryPicBox1[index].Image = Properties.Resources.al1; // Line2
else
GameHistoryPicBox1[index].Image = Properties.Resources.al2; // Line4
}));

您可以阅读更多相关信息 here .

关于c# - 需要 'System.IndexOutOfRangeException'解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19712020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com