我试图从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();
}
答案 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()。