IAsyncResult AsyncState属性始终为null

时间:2015-11-30 08:54:17

标签: c# asynchronous callback

我有一个包含函数的同步和异步实现的库,它连接到某些硬件并读取一些数据。以下是我使用的代码:

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对象的数组?这是我第一次使用这种方法,所以我在这里有点迷失。谢谢你的任何建议。

1 个答案:

答案 0 :(得分:1)

使用异步实现,在启动异步操作期间检索用户状态。由于您传递了一个包含所有空值的字符串[],因此您将其取回。

您没有调用服务的EndReadID()来获取结果。

尝试以下操作:(我假设该服务实现了EndReadID方法,如果它遵循标准做法,它应该如此)

static void ProcessData(IAsyncResult result)
{
    string[] id_read = service.EndReadID(result);
}