c# - 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();
}
解决方案
GUI 中长时间运行的操作是一个问题:只要操作尚未完成(结果或超时),事件就不会完成。并且只要一个事件没有完成,就没有其他代码可以运行。甚至没有通过更改更新 GUI 的代码或“是的,我收到有关用户输入的消息”到 Windows。您将需要某种形式的多任务处理。
幸运的是,网络是长时间运行的操作的最常见案例之一,因此它具有内置的多任务处理方式(异步功能)。然而,这可能不是最好的开始。作为多任务初学者,我建议在 Windows 窗体中使用 BackgroundWorker。至少在你掌握了调用和竞争条件之前。从长远来看,async/await 是更好的模式,但学习曲线要陡峭得多。
推荐阅读
- c# - 无法从用法中推断方法“xyz”的类型参数
- polymer - 屏幕阅读器在悬停时未读取带有 aria-labelledby 参考的单选按钮
- ruby-on-rails - 如何在 Rails lib 子文件夹中修补数组?
- javascript - 结合 PHP 和 HTML 是不好的做法吗?
- html - 锚在移动 Chrome 中的固定位置元素上不起作用
- python - ESP32 MicroPython SSL WebSocket
- unity3d - 场景中的 AR 对象能否充当可以将其他 AR 对象映射到的平面?
- python-3.x - Python中基于多个标准(列)的逐行减法
- qt - 在 Qt 中使用 DLL:未定义的引用
- java - Java快速排序程序不排序数组,arrayoutofbounds异常