C#中的WebRequest / WebResponse阻塞

时间:2012-09-04 23:47:20

标签: c# .net tcp

我试图从C#本地发出信号。目标是向localhost / serv?stream = SOME_STREAM发出请求。我不关心从服务器获取响应,我只需要服务器接收请求。现在我使用以下代码,虽然我并不真正关心使用这些对象 - 任何解决方案都可以:

    private void updateStreams(string streamname)
    {
        WebRequest myWebRequest = WebRequest.Create(new Uri("http://localhost/serv?stream=" + streamname));
        WebResponse myWebResponse = myWebRequest.GetResponse();
        myWebResponse.Close();
    }

我已经尝试了一些调试,阻塞调用似乎是myWebRequest.GetResponse(),但这一行很关键,因为没有它就不会发出请求。我也尝试了以下代码,它们在同一点阻止:

        var myWebRequest = (System.Net.HttpWebRequest)WebRequest.Create(new Uri("http://localhost/serv?stream=" + sesh.session_name));
        using (var myWebResponse = (System.Net.HttpWebResponse)myWebRequest.GetResponse())
        {
            var responseStream = myWebResponse.GetResponseStream();
            responseStream.ReadTimeout = 2; 
            responseStream.Close();
            responseStream.Dispose();
            myWebResponse.Close();
        }

2 个答案:

答案 0 :(得分:1)

您可以使用WebClient.DownloadStringAsync()

WebClient wc = new WebClient();
wc.DownloadStringCompleted += new  DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri("http://localhost/serv?stream=" + streamname));

这将触发请求并在请求完成时调用wc_DownloadStringCompleted方法而不阻塞主线程。

答案 1 :(得分:1)

如果您只是不希望代码阻止并且正在使用.Net 4.5,请在早期版本的框架中尝试WebRequest.GetResponseAsync()WebRequest.BeginGetResponse()

相关问题