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