C#socket StreamReader.ReadToEnd永远等待

C#socket StreamReader.ReadToEnd永远等待,c#,uwp,streamreader,C#,Uwp,Streamreader,在通用Windows平台(UWP)应用程序中,我尝试使用套接字将对象发送到Windows窗体程序: public void CreateListener() { TcpListener listener = new TcpListener(IPAddress.Any, port); listener.Start(); while (true) { if (listener.Pending())

在通用Windows平台(UWP)应用程序中,我尝试使用套接字将对象发送到Windows窗体程序:

public void CreateListener()
    {
        TcpListener listener = new TcpListener(IPAddress.Any, port);
        listener.Start();

        while (true)
        {
            if (listener.Pending())
            {
                var childSocketThread = new Thread(() =>
                {
                    string data = null;
                    var Client = listener.AcceptTcpClient();
                    using (NetworkStream ns = Client.GetStream())
                    using (StreamReader sr = new StreamReader(ns))
                    {
                        data = sr.ReadToEnd();
                        var Items = JsonConvert.DeserializeObject<Models.Orders>(data);
                        Process(Items);
                        ns.Flush();
                        ns.Close();
                    }
                });
                childSocketThread.IsBackground = true;
                childSocketThread.Start();
            }
            else
            {
                Thread.Sleep(50); //<--- timeout
            }
        }
    }
public void CreateListener()
{
TcpListener listener=新的TcpListener(IPAddress.Any,port);
listener.Start();
while(true)
{
if(listener.Pending())
{
var childSocketThread=新线程(()=>
{
字符串数据=null;
var Client=listener.AcceptTcpClient();
使用(NetworkStream ns=Client.GetStream())
使用(StreamReader sr=新StreamReader(ns))
{
数据=sr.ReadToEnd();
var Items=JsonConvert.DeserializeObject(数据);
过程(项目);
ns.Flush();
ns.Close();
}
});
childSocketThread.IsBackground=true;
childSocketThread.Start();
}
其他的
{

Thread.Sleep(50);//似乎您在发送数据时遇到问题,刷新StreamWriter对象后,您必须使用StreamReader作为响应

            Stream streamIn = socket.InputStream.AsStreamForRead();
            StreamReader reader = new StreamReader(streamIn);
            string response = await reader.ReadLineAsync();
希望这能对您有所帮助。

sr.ReadToEnd()
将等待
流关闭。因此,只要
流不关闭,它将永远被卡住。请查看@spaceplane引用的帖子