Win8 RT Metro Style App HTTP响应异步?

时间:2013-01-25 21:29:42

标签: c# windows-8 microsoft-metro

我在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模板并尝试编译时,上面的代码不起作用。

我看过几个例子,但它们似乎都比我预期的要复杂得多。

问题。完成上述任务最直接的方法是什么?越短越好。

感谢您的帮助!

2 个答案:

答案 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避免使用流。