C# 无法从服务器接收响应?
我有一个代码如下:C# 无法从服务器接收响应?,c#,windows-phone-8,C#,Windows Phone 8,我有一个代码如下: public static void sendData() { try { WebClient wc = new WebClient(); var URI = new Uri("abc.com"); string str = "data=1234"; wc.Headers["Content-Type"] = "application/x-w
public static void sendData()
{
try
{
WebClient wc = new WebClient();
var URI = new Uri("abc.com");
string str = "data=1234";
wc.Headers["Content-Type"] = "application/x-www-form-urlencoded";
wc.UploadStringCompleted += new UploadStringCompletedEventHandler(wc__UploadStringCompleted);
wc.UploadStringAsync(URI, "POST", str);
}
catch (Exception ex)
{
string temp = ex.Message;
}
}
public static void wc__UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
try
{
string tt = e.Result;
}
catch (Exception exc)
{
}
}
它已成功发送到服务器,但无法接收数据响应。请告诉我如何响应数据,我希望在sendData方法中获取响应而不是委派,并且wc_uUploadStringCompleted未调用如果您的意思是,您希望响应位于
sendData()
方法中,您可以在sendData()中连接处理程序
本身
wc.UploadStringCompleted += (s,e)=>
{
try
{
string tt = e.Result;
}
catch (Exception exc)
{
}
}
如果您不需要对WP7的支持,我将使用
HttpClient
而不是WebClient
。与async wait
模式一起使用时更加友好。该软件包可通过NuGet
获得,安装需要一秒钟,习惯需要一分钟。从技术上讲,使用内联委托仍在将控制权移交给另一个函数。是的,当然。。我猜他需要sendData()中的一些变量,可以在完成的处理程序中访问。UserState
就是为了这个。为了共享数据,不需要保持委托内联。其他方式违反封装,IMHO:)当然。通过这种方式,您可以在另一个函数中定义一个函数。在一个函数中使用定义的变量,在另一个函数中使用,而不传入它们,这样做可以绕过变量范围(在经典意义上)。
public static async Task<string> sendData()
{
TaskCompletionSource<string> complete = new TaskCompletionSource<string>();
try
{
WebClient wc = new WebClient();
var URI = new Uri("abc.com");
string str = "data=1234";
wc.Headers["Content-Type"] = "application/x-www-form-urlencoded";
wc.UploadStringCompleted += (s, e) =>
{
try
{
string tt = e.Result;
complete.SetResult(tttt);
}
catch (Exception exc)
{
complete.SetException(exc);
}
}
wc.UploadStringAsync(URI, "POST", str);
}
catch (Exception ex)
{
string temp = ex.Message;
complete.SetException(ex);
}
return await complete.Task;
}
public async void foo()
{
string response = await sendData();
}