110,566
社区成员
发帖
与我相关
我的任务
分享
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的,不知道自己怎么想的,想用委托来异步调用,之后就绕进去了。谢谢 @Z65443344
[quote=引用 5 楼 yangpengpeng 的回复:] [quote=引用 4 楼 Z65443344 的回复:] 什么就休眠5秒,休眠一分钟的,都是在干什么啊. 你知道你究竟想干什么吗? 遇到问题先查找问题原因,从根本上解决问题 而不是绕过问题,用一些乱七八糟的手段去规避可能出现的问题