How do you wait for a Network Stream to have data to read?

后端 未结 3 659
花落未央
花落未央 2021-01-02 07:21

I have a worker thread in my application that is responsible for three different things. Requests for two of the jobs turn up in Queues that I have written, the other job is

3条回答
  •  庸人自扰
    2021-01-02 08:17

    You can use the async methods of the NetworkStream and set a ManualResetEvent in the EndReceive method.

    // ...
    netStream.BeginRead(buffer, offset, callback, state);
    // ...
    

    inside the callback method

    netStream.EndRead(ar);
    netStreamManualResetEvent.Set();
    

    then your code

    while (notDone)
    {
        WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStreamManualResetEvent} );
        // ...
        if (netStream.DataAvailable)
        {
            // make the buffer from the AsyncState in the callback method available here
            // process buffer
        }
    }
    

提交回复
热议问题