我正在开发移动应用,问题是当我使用Net.Http执行异步请求(PostAsync)时,我的程序停止运行。
这是我的请求类,我使用Net.Http。
执行请求...
namespace BSoft.Requests
{
public class Requests
{
public Requests(){}
public static string HostName = "https://dev5.360businesssoft.com/";
private static readonly HttpClient httpClient = new HttpClient();
public static async Task<string> PerformPostRequest(Dictionary<string, string> values, string path)
{
string url = HostName + path;
FormUrlEncodedContent content = new FormUrlEncodedContent(values);
HttpResponseMessage response = await httpClient.PostAsync(url, content);
string responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
}
}
这是我的登录类,我在其中调用请求并将结果显示为字符串。
...
namespace BSoft.Login
{
public class Login
{
public Login()
{
}
public static void PerformLogin(string username, string password, bool remember)
{
var values = new Dictionary<string, string>();
values.Add("User", username);
values.Add("Password", password);
var ReturnedObj = Requests.Requests.PerformPostRequest(values, "test.php").Result;
System.Diagnostics.Debug.WriteLine(ReturnedObj);
}
}
}
This is a screenshot of the app, you can notice that the button is freezed
答案 0 :(得分:4)
对Result
的调用阻止了gui线程。相反,await
结果:
var ReturnedObj = await Requests.Requests.PerformPostRequest(values, "test.php");
System.Diagnostics.Debug.WriteLine(ReturnedObj);
您对Result
的调用将阻止gui线程直到PerformPostRequest
完成,因此使用async
功能并不是很重要。如果你真的不希望代码异步执行,那么你也可以删除对异步方法的调用并使调用同步。
答案 1 :(得分:1)
尝试
string returnedString = await Requests.Requests.PerformPostRequest(values, "test.php");