C# 如果一个方法花费的时间超过 2 秒,如何停止它?

2024-01-15

下面的程序将连接到网络并获取“msnbc.com”网页的html内容并打印结果。如果从网页获取数据的时间超过 2 秒,我希望我的方法停止工作并返回。您能举个例子告诉我如何做到这一点吗?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        gethtml();
        MessageBox.Show("End of program");
    }

    public void gethtml()
    {
        HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create("http://msnbc.com/");

        WebResponse Response = WebRequestObject.GetResponse();
        Stream WebStream = Response.GetResponseStream();

        StreamReader Reader = new StreamReader(WebStream);
        string webcontent = Reader.ReadToEnd();
        MessageBox.Show(webcontent);
    }
}

两秒是太长了阻止 UI。仅当您计划获取结果(例如 50 毫秒或更短时间)时,才应阻止 UI。

阅读这篇文章,了解如何在不阻塞 UI 的情况下执行 Web 请求:

http://www.developerfusion.com/code/4654/asynchronous-httpwebrequest/ http://www.developerfusion.com/code/4654/asynchronous-httpwebrequest/

请注意,这一切在 C# 5 中都会容易得多,目前 C# 5 还处于测试版本。在 C# 5 中,您可以简单地使用await操作符异步等待任务的结果。如果您想了解此类事情在 C# 5 中如何工作,请参阅:

http://msdn.microsoft.com/en-us/async http://msdn.microsoft.com/en-us/async

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 如果一个方法花费的时间超过 2 秒,如何停止它? 的相关文章

随机推荐

  • 使用vba建表时如何指定主键

    我已经用下面给出的建议更新了代码 我已经测试过并且效果很好 供未来用户快速参考 我使用下面的代码创建链接表 而无需为每个用户设置 DSN 如果手动连接 我如何指定主键 Dim sConnect As String Dim db As DAO
  • 使用 asp.net 调用存储过程

    如果我在 web config 文件中定义了连接字符串 如何创建到 SQL 数据库的连接C 代码 抱歉忘记指定 然后调用存储过程 然后我想最终以某种方式使用这些数据作为 GridView 的数据源 以下是 web config 中连接字符串
  • 如何使用 Json.NET 将 IHtmlString 序列化为 JSON?

    我有一个包含通过 JSON 发布的原始 HTML 的字段 该字段最近从字符串转换为 IHtmlString 当这个变化发生时 该字段从一个 JSON 字符串变成一个空对象 并且一堆消耗 JSON 的东西开始爆炸 When it was a
  • 使用curl 时,出于安全原因,如何使我的cacert.pem 保持最新状态?

    我想保持我的根证书为最新状态 以便与 cURL 和 PHP 内部一起使用curl命令 但是当前没有参数可以下载正确的安全连接所需的当前文件并使其保持最新 以及使用示例curl在 PHP 中用于安全连接 需要一个名为cacert pem 用于
  • Option.zip 返回列表,而不是选项

    标准库文档描述zip部分签名为def zip B that GenIterable B Option A B but Some 1 zip Some 2 返回一个List 1 2 not Some 1 2 是实施有问题还是文档有问题 有缺陷
  • 如何使用 C# 将每个单词的第一个字符或整个字符串的第一个字符大写?

    我可以编写自己的算法来做到这一点 但我觉得应该有相当于ruby 的人性化 http api rubyonrails org classes ActiveSupport CoreExtensions String Inflections ht
  • 如何在 Ruby 2.7.0 上安装 Nokogiri

    我最近升级到 Ruby v2 7 0 当我尝试安装 Nokogiri 时 出现以下错误 ERROR Error installing nokogiri The last version of nokogiri gt 0 to support
  • 根据另一列中的值有条件地使用颜色填充特定列中的单元格

    我有以下数据框 col1 lt rep c A B C D 10 col2 lt rep c 1 0 10 col3 lt rep c 0 1 10 col4 lt rep c 1 0 10 col5 lt rep c 0 1 10 tes
  • Git“实时服务器”最佳实践

    我和我的合作伙伴一直在尝试从影响公众可查看的文件的存储库中推送和拉取的想法 而不是将存储库存储在隐藏位置 并在我们认为文件可以使用时仅通过 FTP 传输文件 虽然能够直接推送到 实时站点 将非常方便 但我想知道这会产生什么负面影响 如果有的
  • 在浏览器中编译一个“.vue”组件,只用JS?

    我想将 vue 组件 包含 html js css 编译为 JS 但在浏览器端 没有 browserify vuify webpack 或其他 在一个更好的世界中 我想将我的 vue 组件包含到我的 html 应用程序中 就像这样 不需要在
  • Google 表格中的 SUBQUERY 等效项

    使用查询 我尝试计算当月注册的托盘最多的当天注册的托盘的最大数量 该栏将启动 最大日 我的电子表格的链接 https docs google com spreadsheets d 1DkLmJUUFJgnlMD2u PYcxmPlal ar
  • 熊猫压平一列中的列表列表?

    我正在尝试压平一列 该列是列表的列表 var var2 0 9122532 0 458182615 0 79834910 0 1 79834910 0 458182615 0 9122532 0 2 458182615 0 79834910
  • 尝试播放声音时出错

    类似这个问题Matlab 中的基本声音错误 https stackoverflow com q 9369833 501663 没有答案 当我尝试播放声音 Matlab 2012a Windows 7 64位 时 使用sound sounds
  • java中的继承和超类(Object, Class)

    Is java lang Object隐式继承的所有自定义类 对象的超类 我以为java不支持多重继承 我问的原因是我是否已经从自定义类中的另一个类继承 并且 java 再次强制隐式继承java lang Object最重要的是 这不是多重
  • 为什么我们要在FRP中使用Behavior

    我正在学习反应式香蕉 为了理解该库 我决定实现一个虚拟应用程序 每当有人按下按钮时 该应用程序就会增加计数器 我使用的 UI 库是 Gtk 但这与解释无关 这是我提出的非常简单的实现 import Graphics UI Gtk impor
  • 是否可以有像部分类一样的部分xaml?

    我想将一个 xaml 文件分成几个文件 有点像部分类 有办法做到这一点吗 我希望能够更方便地管理我的项目文件 有一些可能性 尽管它可能并不完全是你所想的 您可以通过 ResourceDictionary 的方式外包资源 这对于样式和模板来说
  • 是否可以更改导航按钮以显示图像而不是蓝色?

    我正在尝试设置一个NavigationButton显示图像 而不仅仅是蓝色按钮 目前 我正在显示一个水平的 Scrollview 由图像组成 这些图像应该导致另一个视图 该视图将呈现在rootView 然而 当我将这些图像包裹在Naviga
  • 在带有 iOS 11 的 xcode 9 中 - 首次运行时加载地图图块的问题

    更新了新发现 在模拟器和设备上进行了测试 当应用程序从冷启动运行时 地图无法正确加载 不显示图块 mapViewDidFinishLoadingMap没有被调用 因此 由于地图未完成而出现问题 但我没有收到任何错误 如果我只是短暂退出应用程
  • 如何使用模拟框架测试在谷歌测试延迟后进行的调用

    我目前正在尝试评估不同的测试框架 当使用模拟框架时 我倾向于 FakeIt 但 google mock 也很好 我知道您可以通过在调用函数之前和之后使用操作系统的计时器调用来验证函数的性能来进行自己的 性能 测试 这不是我所追求的 我所做的
  • C# 如果一个方法花费的时间超过 2 秒,如何停止它?

    下面的程序将连接到网络并获取 msnbc com 网页的html内容并打印结果 如果从网页获取数据的时间超过 2 秒 我希望我的方法停止工作并返回 您能举个例子告诉我如何做到这一点吗 public partial class Form1 F