Win8 RT Metro 风格应用 HTTP 响应异步
本文关键字:HTTP 响应 异步 应用 风格 RT Metro Win8 | 更新日期: 2023-09-27 17:56:09
我有一个在 WPF 中为家庭自动化系统创建的 C# 应用。我想将其转换为 win8 现代 UI 应用程序只是为了好玩。我不是程序员,甚至不是接近...因此,任何指示将不胜感激。
这是我的旧代码,用于检查其中一个设备的状态。 以下内容仅检查指示灯的状态代码。 1 表示灯已打开...0 它已关闭。
//InitializeComponent();
WebRequest MasterbedRoomrequest = WebRequest.Create("http://10.10.1.100:3480/data_request?id=lu_variableget&serviceId=urn:upnp-org:serviceId:SwitchPower1&Variable=Status&DeviceNum=7");
HttpWebResponse MasterbedRoomWebresponse = (HttpWebResponse)MasterbedRoomrequest.GetResponse();
Stream MasterbedRoomdataStream = MasterbedRoomWebresponse.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader readerMasterBedRoom = new StreamReader(MasterbedRoomdataStream);
// Read the content.
string responseFromServerMasterbedRoomdata = readerMasterBedRoom.ReadToEnd();
// Display the content.
//Console.WriteLine(responseFromServer);
if (responseFromServerMasterbedRoomdata == "1")
{
MasterBedRoomLamp.Checked = true;
}
// Cleanup the streams and the response.
readerMasterBedRoom.Close();
MasterbedRoomdataStream.Close();
MasterbedRoomWebresponse.Close();
我想在现代 UI 应用程序中做同样的事情。 从我在网上读到的内容来看...似乎推荐的方法是使用 HTTP 的异步功能? 当我将其放入现代 UI VS 模板之一并尝试编译时,上面的代码不起作用。
我看过几个例子,但它们似乎都比我预期的要复杂。
问题。 完成上述任务最直接的方法是什么? 越短越好。
感谢您的帮助!
它会有点不同。
public async Task<bool> IsLampOn(){
string responseData = await GetDataFromUrl("http://10.10.1.100:3480/data_request?id=lu_variableget&serviceId=urn:upnp-org:serviceId:SwitchPower1&Variable=Status&DeviceNum=7");
return (responseData == "1")
}
public async Task<string> GetDataFromUrl(string url){
HttpClient http = new HttpClient();
HttpResponseMessage response = await(http.GetAsync(new Uri(url)));
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
从本质上讲,您只需致电
bool val = await IsLampOn();
使用 HttpClient 类。下面是一个简单的示例。 您可以避免使用 GetStringAsync 进行流工作。