【问题标题】:Win8 RT Metro Style App HTTP Response Async?Win8 RT Metro Style App HTTP 响应异步?
【发布时间】:2023-03-30 01:59:01
【问题描述】:

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

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

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

感谢您的帮助!

【问题讨论】:

  • “我不是程序员,甚至不是很接近...所以任何指针将不胜感激。”恐怕你不明白这有多好笑。喜欢指针的新手程序员很少。
  • 哈!下次我会省略指针。

标签: c# windows-8 microsoft-metro


【解决方案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();

【讨论】:

  • 感谢朱利安的帮助!感谢您花时间写出这个例子。看起来它会为我解决问题!致电 islampon 时,我收到一条奇怪的消息,但我会弄清楚的。再次感谢。
  • 没问题;如果您需要任何其他帮助,请告诉我。
【解决方案2】:

使用HttpClient class。这是simple example。您可以使用GetStringAsync 避免流工作。

【讨论】:

  • 谢谢。我看过那个例子,但无法完全理解。看来方案 1 最符合我正在尝试做的事情。我还没有完全明白。难道你不应该能够在大约 3 - 5 行代码中完成上述操作吗?没有所有的错误处理等......该示例似乎正在对 url 执行 Uri.TryCreate 以及类似的响应。 HttpResponseMessage 响应 = 等待 httpClient.GetAsync(resourceUri);等待 Helpers.DisplayTextResult(response, OutputField);不幸的是,我一无所获。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
相关资源
最近更新 更多