我有一个包含函数的同步和异步实现的库,它连接到某些硬件并读取一些数据。以下是我使用的代码:
public class Reader
{
private HardwareService service = new HardwareService();
private string[] id = new string[128];
public string[] ReadData()
{
// Synchronous implementation that works, but blocks the main thread.
return service.ReadID();
}
public void ReadDataAsync()
{
// Asynchronous call, that does not block the main thread, but the data returned in the callback are always null.
AsyncCallback callback = new AsyncCallback(ProcessData);
service.BeginReadID(callback, id);
}
static void ProcessData(IAsyncResult result)
{
string[] id_read = (string[])result.AsyncState; // Always NULL
}
}
为什么当我使用非阻塞异步调用时,我总是收到填充了NULL对象的数组?这是我第一次使用这种方法,所以我在这里有点迷失。谢谢你的任何建议。
答案 0 :(得分:1)
使用异步实现,在启动异步操作期间检索用户状态。由于您传递了一个包含所有空值的字符串[],因此您将其取回。
您没有调用服务的EndReadID()来获取结果。
尝试以下操作:(我假设该服务实现了EndReadID方法,如果它遵循标准做法,它应该如此)
static void ProcessData(IAsyncResult result)
{
string[] id_read = service.EndReadID(result);
}