异步调用的四种方法

2023-11-10

异步调用的四种方法

我们都知道普通方法运行是单线程的,如果中途有大型操作都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了。C#异步调用是很好的解决方法,异步执行某个方法,程序立即开辟一个新线程去运行你的方法,主线程包括界面就不会死掉了。

  要实现C#异步调用,首先要启动C#异步调用,然后在检索C#异步调用。通常情况下,我们使用BeginInvoke方法启动C#异步调用,用EndInvoke方法检索C#异步调用结果。BeginInvoke方法与需要异步执行的方法具有相同的参数,BeginInvoke立即返回,不等待C#异步调用完成。BeginInvoke返回IasyncResult,可用于监视调用进度;EndInvoke方法之前要调用BeginInvoke,如果C#异步调用未完成,EndInvoke将一直阻塞到C#异步调用完成。EndInvoke的参数包括您需要异步执行的方法的outref参数以及由BeginInvoke返回的IAsyncResult

  使用BeginInvokeEndInvoke进行C#异步调用的常用方法

 一、使用 WaitHandle 等待异步调用

  等待 WaitHandle 是一项常用的线程同步技术。您可以使用由 BeginInvoke 返回的 IAsyncResult AsyncWaitHandle 属性来获取 WaitHandleC#异步调用完成时会发出 WaitHandle 信号,而您可以通过调用它的 WaitOne 等待它。如果您使用 WaitHandle,则在C#异步调用完成之后,但在通过调用 EndInvoke 检索结果之前,可以执行其他处理。

  二、异步调用完成时执行回调方法

  如果启动异步调用的线程不需要处理调用结果,则可以在调用完成时执行回调方法。回调方法在 ThreadPool 线程上执行。要使用回调方法,必须将代表该方法的 AsyncCallback 委托传递给 BeginInvoke。也可以传递包含回调方法将要使用的信息的对象。

  三、轮询异步调用完成

  您可以使用由 BeginInvoke 返回的 IAsyncResult IsCompleted 属性来发现C#异步调用何时完成。从用户界面的服务线程中进行C#异步调用时可以执行此操作。轮询完成允许用户界面线程继续处理用户输入。

  四、使用 EndInvoke 等待异步调用

  异步执行方法的最简单方式是以 BeginInvoke 开始,对主线程执行一些操作,然后调用 EndInvokeEndInvoke 直到C#异步调用完成后才返回。这种技术非常适合文件或网络操作,但是由于它阻塞 EndInvoke,所以不要从用户界面的服务线程中使用它。

 

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

异步调用的四种方法 的相关文章

随机推荐

  • (转载)jquery checkbox 设置选中和不选中

    https blog csdn net hantanxin article details 103187996 1 设置选中 hasApply prop checked true 设置不选中 hasApply prop checked fa
  • 使用openCV比对任意两张图片的相似度(亲测较准确)

    方案 使用openCV中的直方图算法做对比 测试效果较好 步骤 在java中使用openCV 1 引入openCV的依赖
  • openwrt 没有wifi

    wifi radio0 is disabled radio0 is disabled uci set wireless radio0 disabled 0
  • Web中什么是token,token的组成部分详解(jwt Token)

    token是计算机术语 令牌 令牌是一种能够控制站点占有媒体的特殊帧 以区别数据帧及其他控制帧 token其实说的更通俗点可以叫暗号 在一些数据传输之前 要先进行暗号的核对 不同的暗号被授权不同的数据操作 使用基于 Token 的身份验证方
  • K8s基础9——服务发现Coredns、Ingress Controller多种暴露方式、TLS+DaemonSet、Headless Services

    文章目录 一 服务发现机制 1 1 环境变量注入 1 2 DNS解析 二 Ingress 4 1 部署Ingress controller 4 2 暴露Ingress Controller 4 2 1 SVC NodePort方式 4 2
  • ElementUI 之el-form表单重置功能按钮

    业务场景 使用el form时 点击重置按钮或者取消按钮时会实现表单重置效果 重置功能按钮功能实现详细步骤 第一 首先给el form添加ref属性
  • 手把手教你做出数据可视化项目(四)动态模拟航班飞行路线

    数据可视化前言 https blog csdn net diviner s article details 115933789 项目最终效果图 此篇博客为自己学习pink老师的课后完成的项目的总结与记录 仅供交流参考 版权所有 转载请标注原
  • 服务器2016系统怎么添加用户名,windows-server-2016 – 如何在Nano Server中添加SMTP服务器角色?...

    使用 this TechNet page上的信息 我已经成功建立了一个远程PowerShell会话 其中包含在Hyper V VM中运行的2016 Preview 2 Nano Server 我现在想要添加SMTP服务器角色 我期待这是一个
  • android 史上最简单的下拉选择菜单DropDownMenu 几行代码轻松搞定!

    这是我在CSDN上第一篇原创文章 趁着从上家公司离职去考驾照的这段日子 想通过写技术博客的方式 锻炼一下自己的语言表达能力 以及对之前工作的总结 废话不多说了 直接进入正题 先给客官来张效果图 一 思路 下拉菜单首先让我想到了PopupWi
  • Java代码审计详解

    一 Fortify代码审计工具 1 Fortify简介 Fortify是Micro Focus旗下AST 应用程序安全测试 产品 其产品组合包括 Fortify Static Code Analyzer提供静态代码分析器 SAST Fort
  • 每日一道Leetcode——按奇偶排序数组II

    题目 我的解法一 双端队列 思路 用两个双端队列分别存储奇数和偶数 然后依次取一个 class Solution public int sortArrayByParityII int A Deque
  • 拓世AI

    2023年的小红书 发展趋势依旧昂扬向上 最新数据显示 小红书拥有逾3亿的月活用户 且超过80 的用户集中在20 30岁年龄段 这代表什么 广大的年轻用户基数和消费能力 正处于购买力上升期的年轻人 是品牌最想抓住的目标用户 巨大的红利吸引了
  • Visual C# 2010 实现菜单项和状态栏

    演练 向窗体提供标准菜单项 Visual Studio 2010 其他版本 此主题尚未评级 评价此主题 可以通过 MenuStrip 控件为窗体提供标准菜单 此演练演示如何使用 MenuStrip 控件创建标准菜单 窗体还将在用户选择菜单项
  • karatsuba大数乘法问题及其高效算法

    转载自 iTimeTraveler博客 题目 编写两个任意位数的大数相乘的程序 给出计算结果 比如 题目描述 输出两个不超过100位的大整数的乘积 输入 输入两个大整数 如1234567 和 123 输出 输出乘积 如 151851741
  • arcgis应用程序无法正常启动0xc0000906

    第一 在开始 运行里输入CMD确定 在命令行窗口下输入以下内容后按回车for 1 in windir system32 ocx do regsvr32 s 1完了后 再输入以下内容并回车 第二 再输入以下内容并回车for 1 in wind
  • Android 代码混淆语法讲解及常用模板,app架构图

    keepclassmembers class R public static 表示不混淆 R 类中 的 static 变量 在 R 类中 这些资源 ID 是系统自动帮我们生成的 混淆了就无法找到相应的资源 dontwarn android
  • VUE 之 项目常规配置详解

    Vue 项目的常规配置可以分为以下几个方面 路由配置 使用 Vue Router 进行路由配置 需要在 src router index js 文件中配置路由表和路由守卫 状态管理 使用 Vuex 进行状态管理 需要在 src store
  • C++多线程:thread_local

    概念 首先thread local是一个关键词 thread local是C 11新引入的一种存储期指定符 它会影响变量的存储周期 Storage duration 与它同是存储期指定符的还有以下几个 关键字 说明 备注 auto 自动存储
  • new详解

    new int和new int 内置类型 对于int内置类型 new仅仅只是分配内存 除非后面显示加 相当于调用它的构造函数 int p new int 10 10个未初始化的int int p2 new int 10 10个值初始化为0的
  • 异步调用的四种方法

    异步调用的四种方法 我们都知道普通方法运行是单线程的 如果中途有大型操作都会导致方法阻塞 表现在界面上就是 程序卡或者死掉 界面元素不动了 不响应了 C 异步调用是很好的解决方法 异步执行某个方法 程序立即开辟一个新线程去运行你的方法 主线