0

我在 WPF 中为我的家庭自动化系统创建了一个 C# 应用程序。我想将其转换为 win8 Modern 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 的 ASYNC 功能?当我将上面的代码放入现代 UI VS 模板之一并尝试编译时,它不起作用。

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

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

谢谢您的帮助!

4

2 回答 2

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();
于 2013-01-27T04:01:27.657 回答
0

使用HttpClient 类。这是一个简单的例子。您可以避免使用GetStringAsync进行流工作。

于 2013-01-25T21:55:20.767 回答