C# WebRequest响应在多线程环境中混合

C# WebRequest响应在多线程环境中混合,c#,multithreading,httpwebrequest,webrequest,C#,Multithreading,Httpwebrequest,Webrequest,我正面临一个网络请求-响应混乱的问题 我正在开发一个关于移动设备的C#项目(PocketPC2003) 这里是上下文 我的软件有一个线程每5秒运行一次,以ping服务器,发送其状态并检索一些服务器信息:functionping() 根据用户界面的不同,我与同一服务器联系以声明新的用户操作:functionsendNewEvent() 这两个操作使用以下函数request(),该函数联系服务器,等待其响应并返回服务器响应 它正在工作,但在某些情况下,服务器的响应是混合的:ping()函数接收sen

我正面临一个网络请求-响应混乱的问题

我正在开发一个关于移动设备的C#项目(PocketPC2003)

这里是上下文

我的软件有一个线程每5秒运行一次,以ping服务器,发送其状态并检索一些服务器信息:function
ping()

根据用户界面的不同,我与同一服务器联系以声明新的用户操作:function
sendNewEvent()

这两个操作使用以下函数
request()
,该函数联系服务器,等待其响应并返回服务器响应

它正在工作,但在某些情况下,服务器的响应是混合的:
ping()
函数接收
sendNewEvent()
函数的响应,即使这些函数没有同时播放

我不明白这怎么可能,为什么可能。有人做过同样的实验吗

request()
函数中是否存在线程不安全的内容(HttpWebResponse、WebRequest等)

更新

我确信服务器通过请求发送正确的数据。所有请求和服务器应答都记录到DB表中

我尝试了此解决方案,但在我的情况下不起作用:


隐马尔可夫模型。。确定这是客户端问题吗?@MartinJames是的,我确定服务器通过请求发送正确的数据。所有请求和服务器应答都记录到DB表中。此代码混合响应的唯一方法是,如果您对请求、响应或数据流使用某些全局(即在方法之外定义的)变量。您的问题不在这个方法之内,很可能是因为您的线程正在使用共享数据。此外,您还需要编写一个
finally
块来处理读取器、数据流和响应。目前,如果出现异常,它们将保持打开状态,这可能会导致您的程序由于资源不足而失败。
    public string request(string xUrl)
    {
        try
        {
            // authentication
            CredentialCache cc = new CredentialCache();
            cc.Add(new Uri(xUrl), "Basic", new NetworkCredential(PropertiesFile.getWSUser(), PropertiesFile.getWSPwd()));                

            // Create a request for the URL.        
            WebRequest request = WebRequest.Create(xUrl);
            request.Timeout = 5000;
            //request.KeepAlive = true;
            request.Credentials = cc;
            // Get the response.
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Cleanup the streams and the response.
            reader.Close();
            dataStream.Close();
            response.Close();

            return responseFromServer;
        }
        catch(Exception e)
        {
            if (PropertiesFile.getShowDebugMessageBox())
                MessageBox.Show("WebCalls request exception : " + e.Message);

            return null;
        }
    }