我在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();
我想在Modern UI应用程序中执行相同操作。从我在网上看到的...似乎推荐的方法是使用HTTP的ASYNC功能?当我把它扔进一个现代UI VS模板并尝试编译时,上面的代码不起作用。
我看过几个例子,但它们似乎都比我预期的要复杂得多。
问题。完成上述任务最直接的方法是什么?越短越好。
感谢您的帮助!
答案 0 :(得分:1)
这会有点不同。
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();
答案 1 :(得分:0)
使用HttpClient class。这是一个simple example。您可以使用GetStringAsync避免使用流。