C# 线程 嘱托

C# 线程 委托


Thread GetStatus_Thread = new Thread(new ThreadStart(Del_GetStatus));
                GetStatus_Thread.IsBackground = true;
                GetStatus_Thread.Start(); 

 delegate void delegat_GetStatus();

        public void Del_GetStatus()
        {
            delegat_GetStatus read_B = new delegat_GetStatus(GetStatus);
            IAsyncResult result = read_B.BeginInvoke(new AsyncCallback(ACTest), null);
            
            while (!result.IsCompleted)
            {
                Thread.Sleep(1000);
            }
            if (result.IsCompleted)
            {
                Thread.Sleep(1000); 
                Del_GetStatus();
            }
        }

      public void ACTest(IAsyncResult result)
              {
               AsyncResult asyncRet=(AsyncResult) result;
               delegat_GetStatus dt = (delegat_GetStatus)asyncRet.AsyncDelegate;
               dt.EndInvoke(result);   
              }

        public void GetStatus()
        {
            if (eLogic.Is_Write == false)
            {
                listStatus.Items.Clear();
                Dictionary<string, string> dic = eLogic.eDriver.getDeviceStatus();
                foreach (KeyValuePair<string, string> kvp in dic)
                {
                    listStatus.Items.Add(kvp.Key + ":" + kvp.Value);
                } 
            }
            if (is_PK == true)
            {
                if (read_list_Index < eLogic.readInfo_List.Count)
                {
                    for (int i = read_list_Index; i < eLogic.readInfo_List.Count; i++)
                    {
                        listReadInfo.Items.Add(eLogic.readInfo_List[i].ToString());
                        read_list_Index++;
                    }
                }
            }
        }


各位大侠,现在我用线程调用委托方法时,长时间运行,会出现下图的错误信息。各位帮忙看看是什么问题,谢谢?C# 线程 嘱托
------解决方案--------------------
Del_GetStatus中,在if (result.IsCompleted)时,递归了,造成死循环
------解决方案--------------------
想无限循环执行记得用while
递归是遍历的时候用的,不是用来让你一直不断重复执行同一个代码的.
你每递归一次,程序就实例化一个新的函数,无限循环内存就溢出了.

不爱用while,你直接goto到函数开始的地方也行啊.