1

我正在尝试从 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();
        }
4

2 回答 2

1

你可以WebClient.DownloadStringAsync()这样使用:

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

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

于 2012-09-04T23:52:29.650 回答
1

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

于 2012-09-04T23:59:25.267 回答