首页 > 解决方案 > http请求按钮。目的地无法到达

问题描述

在 c# 中,我有一个接受 HTTP 请求作为远程命令的设备。

我创建了一个发送这些请求的按钮,它不是完美的,但它可以工作。

但是,当设备断开连接并且有

目的地无法到达

响应应用程序冻结,直到我重新启动它。我需要一种解决方法,也许有一些超时会在 1 秒后关闭流。

     private void httpBTN_Click(object sender, EventArgs e)
    {
        String URI = "http://192.168.1.118/cgi-bin/aw_cam?cmd=DCB:0&res=0";
        WebClient webClient = new WebClient();
        Stream stream = webClient.OpenRead(URI);
        stream.Close();
    }

标签: c#webclient

解决方案


GUI 中长时间运行的操作是一个问题:只要操作尚未完成(结果或超时),事件就不会完成。并且只要一个事件没有完成,就没有其他代码可以运行。甚至没有通过更改更新 GUI 的代码或“是的,我收到有关用户输入的消息”到 Windows。您将需要某种形式的多任务处理。

幸运的是,网络是长时间运行的操作的最常见案例之一,因此它具有内置的多任务处理方式(异步功能)。然而,这可能不是最好的开始。作为多任务初学者,我建议在 Windows 窗体中使用 BackgroundWorker。至少在你掌握了调用和竞争条件之前。从长远来看,async/await 是更好的模式,但学习曲线要​​陡峭得多。


推荐阅读