C# 索引在windows窗体范围内时列表超出范围

C# 索引在windows窗体范围内时列表超出范围,c#,.net,winforms,C#,.net,Winforms,我的windows窗体应用程序中有一个奇怪的错误,我得到: 索引超出范围。必须为非负数且小于集合的大小 在代码字节listval=list1[i]处。list1的长度为18,在汽车中显示的list1[i]是正确的值,但代码中有一个错误。这是代码错误还是VisualStudio的小故障 static class Class1 { static List<byte> list1 = new List<byte>(); public static void St

我的windows窗体应用程序中有一个奇怪的错误,我得到:

索引超出范围。必须为非负数且小于集合的大小

在代码
字节listval=list1[i]
处。
list1
的长度为18,在汽车中显示的
list1[i]
是正确的值,但代码中有一个错误。这是代码错误还是VisualStudio的小故障

static class Class1
{
    static List<byte> list1 = new List<byte>();
    public static void Start()
    {
        Thread t = new Thread(new ThreadStart(Process)) { IsBackground = true };
        t.Start();
    }
    static void Action()
    {
        byte[] array1;
        while(true) {
            while(list1.Count == 0) {}
            array1 = new byte[list1.Count];
            for (int i = 0; i < list1.Count; ++i)
            {
                byte listval = list1[i];
                array1[i] = listval;
            }
        }
    }
    public static void Add(byte[] data)
    {
        list1.AddRange(data);
    }
}
静态类Class1
{
静态列表list1=新列表();
公共静态void Start()
{
线程t=新线程(新线程开始(进程)){IsBackground=true};
t、 Start();
}
静态空洞作用()
{
字节[]数组1;
while(true){
而(list1.Count==0){
array1=新字节[list1.Count];
对于(int i=0;i
编辑
通过将字节listval=list1[i]更改为字节listval=list1.ToList()[i]对其进行修复

我的钱在“代码错误”上。这个
Action()
永远不会停止执行的事实很好地表明它可能是代码错误。我在这里看到这个
而(list1.Count==0){}
,只是想弄清楚它为什么会出现(相对而言)。当暂停完全有效时。虽然(正确){}-我感觉不舒服:(