[C#基础]c#中的BeginInvoke和EndEndInvoke

article/2025/9/30 7:54:01

摘要

异步这东西,真正用起来的时候,发现事情还是挺多的,最近在项目中用到了异步的知识,发现对它还是不了解,处理起来,走了不少弯路。觉得还是补一补还是很有必要的。

MSDN原文地址:https://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.110).aspx

正文

.Net framework可以让你异步调用任何方法。为达这样的目的,你可以定义一个与你要调用的方法的签名相同的委托。公共语言运行时将自动为该委托定义与签名相同的BeginInvok和EndInvoke方法。

异步委托调用BeginInvok和EndInvoke方法,但在.NET Compact Framework中并不支持。

BeginInvoke方法触发你的异步方法,它和你想要执行的异步方法有相同的参数。另外还有两个可选参数,第一个是AsyncCallback委托是异步完成的回调方法。第二个是用户自定义对象,该对象将传递到回调方法中。BeginInvoke立即返回并且不等待完成异步的调用(继续执行该下面的代码,不需要等待)。BeginInvoke返回IAsyncResult接口,可用于检测异步调用的过程。

通过EndInvoke方法检测异步调用的结果。如果异步调用尚未完成,EndInvoke将阻塞调用线程,直到它完成。EndInvoke参数包括out和ref参数。

下面代码演示使用BeginInvoke和EndInvoke进行异步调用的四种常见方式。在调用BeginInvoke可以做以下工作:

  1. 做一些其他操作,然后调用EndInvoke方法阻塞线程直到该方法完成。
  2. 使用IAsyncResult.AsyncWaitHandle属性,使用它的WaitOne方法阻塞线程直到收到WaitHandle信号,然后调用EndInvoke。
  3. 检查BeginInvoke返回值IAsyncResult的状态来决定方法是否完成,然后调用EndInvoke方法。
  4. 通过在BeginInvoke方法中传递该委托,在回调方法中调用该委托的EenInvoke方法。

注意

无论你怎么使用,都必须调用EndInvoke方法结束你的异步调用。

下面通过模拟一个耗时的操作,实现上面说的那四种情况。

情况一:通过EndInovke阻塞线程,直到异步调用结束。

using System;
using System.Diagnostics;
using System.Threading;namespace BeginInvokeDemo
{/// <summary>/// 委托必须和要调用的异步方法有相同的签名/// </summary>/// <param name="callDuration">sleep时间</param>/// <param name="threadId">当前线程id</param>/// <returns></returns>public delegate string AsyncMethodCaller(int callDuration, out int threadId);class Program{/// <summary>/// 主函数/// </summary>/// <param name="args"></param>static void Main(string[] args){AsyncMethodCaller caller = new AsyncMethodCaller(TestMethodAsync);int threadid = 0;//开启异步操作IAsyncResult result = caller.BeginInvoke(3000, out threadid, null, null);for (int i = 0; i < 10; i++){Console.WriteLine("其它业务" + i.ToString());}//调用EndInvoke,等待异步执行完成Console.WriteLine("等待异步方法TestMethodAsync执行完成");string res = caller.EndInvoke(out threadid, result);Console.WriteLine("Completed!");Console.WriteLine(res);Console.Read();}/// <summary>/// 与委托对应的方法/// </summary>/// <param name="callDuration"></param>/// <param name="threadId"></param>/// <returns></returns>static string TestMethodAsync(int callDuration, out int threadId){Stopwatch sw = new Stopwatch();sw.Start

http://chatgpt.dhexx.cn/article/itSGPBFX.shtml

相关文章

C# BeginInvoke实现异步编程

C# BeginInvoke实现异步编程 BeginInvoke实现异步编程的三种模式&#xff1a; 1.等待模式 在发起了异步方法以及做了一些其他处理之后&#xff0c;原始线程就中断并且等异步方法完成之后再继续&#xff1b; eg&#xff1a; using System; using System.Collections.Generic;…

This.invoke和this.begininvoke的区别?

应用场景 在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke和BeginInvoke就是为了解决这个问题。 个人总结 ①This.begininvoke和this.invoke注册委托调用的方法都是等UI主线程执行到“windows消息泵”的时候才…

C#——invoke和begininvoke 区别

invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱&#xff0c;这两天看了些资料&#xff0c;对这两个的用法和原理有了些新的认识和理解。 首先说下&#xff0c;invoke和begininvoke的使用有两种情况&#xff1a; 1. control中的invoke、begininvoke。…

C#Invoke和BeginInvoke应用详解

最近&#xff0c;在研究Invoke的使用&#xff0c;但是真的是一头雾水&#xff0c;网上看了很多资料&#xff0c;感觉还是看不懂&#xff0c;因为对于入门级的小白&#xff0c;想像不出Invoke的应用场景&#xff0c;更谈不上如何用了&#xff1f; 1、Invoke到底是什么&#xff…

Java工作流框架:探索流程引擎的实现和应用

目前&#xff0c;市面上有很多基于SpringBootVue前后端分离的Java快速开发框架和工作流开发框架可供选择。以下是一些比较流行的框架&#xff1a; 1. Spring Cloud&#xff1a;Spring Cloud是一套基于Spring Boot的开发工具&#xff0c;用于快速构建分布式系统中的服务。它利用…

Java工作流框架和应用场景

一&#xff1a;Java工作流框架是一种用于设计、执行和管理工作流程的技术。以下是几个常见的Java工作流框架&#xff1a; Activiti&#xff1a;Activiti是一款流行的开源Java工作流引擎&#xff0c;它基于BPMN 2.0标准&#xff0c;支持复杂的工作流程设计和管理。Activiti具有高…

工作流使用

#&#x1f33b; 工作流使用 无需开发代码&#xff0c;即可快速创建工作流、表单&#xff0c;并完成审批、监控等操作。 #功能脑图 #特点 基于 Flowable&#xff08;Activiti&#xff09;生来具有的稳定工作流引擎。使用flowable官方流程设计器&#xff0c;功能强大&#xff…

工作流 开源(java工作流框架jbpm)

工作流(工作流) :“在部分或整个业务流程的计算机应用环境中实现自动化” l简单来说&#xff0c;就是用程序管理工作流程&#xff0c;以表格审核和任务处理为主体&#xff0c;实现办公室自动化 工作流帮助器管理业务流程&#xff0c;业务操作保持不变。 工作流是通知流程&…

java工作流开源框架可以提高工作效率吗?

要想回答这个问题&#xff0c;就需要了解什么是java工作流开源框架&#xff0c;以及java工作流开源框架的主要特点是什么。随着大数据时代的拓展发展&#xff0c;低代码开发平台已经在数字化管理时代中深受欢迎&#xff0c;是做好数据管理和提升企业数字化发展步伐的重要工具。…

Java开源 开源工作流

Willow 点击次数&#xff1a;18942 由Huihoo Power开发详细可到其中文主页查看。 OpenWFE 点击次数&#xff1a;17672 OpenWFE是一个开放源码的Java工作流引擎。它是一个完整的业务处理管理套件&#xff1a;一个引擎&#xff0c;一个工作列表&#xff0c;一个Web界面和一个…

Java实现自定义工作流

这篇文章实现java自定义工作流程&#xff0c;对工作流不太熟悉的可以先看下工作流相关文章&#xff1a; 工作流 相关表结构、实体创建 流程主表&#xff1a;tbl_workflow_requestbase&#xff08;这里以项目工地工作流为例&#xff09; CREATE TABLE tbl_workflow_requestba…

JAVA工作流的优雅实现方式

今天查找线上问题&#xff0c;看到一个让我脑洞大开的工作流实现方式。以前用过责任链模式&#xff0c;也用过模板模式实现类工作流的方式&#xff0c;但是对比这个工具&#xff0c;逊色不少&#xff0c;不卖关子了&#xff0c;就是Apache Commons Chain&#xff0c;它是Comman…

Java开源工作流引擎

http://www.open-open.com/08.htm Willow 由Huihoo Power开发详细可到其中文主页查看。 更多Willow信息 OpenWFE OpenWFE是一个开放源码的Java工作流引擎。它是一个完整的业务处理管理套件&#xff1a;一个引擎&#xff0c;一个工作列表&#xff0c;一个Web界面和一个反应器&…

Java工作流管理系统(activity6.0)

activity6.0工作流系统知识点文章 第一章 activity流程部署&#xff08;自动部署与动态BPMN部署&#xff09; 第二章 activity变量使用 第三章 activity权限控制&#xff08;代办任务查询&#xff09; 第四章 activity审核任务&#xff08;签领、完成任务、跳过节点、新增节点…

JAVA实现一个工作流引擎

介绍 工作流是一种将一系列相关的任务和活动组织起来的技术&#xff0c;以便在企业或组织中自动化或半自动化地管理业务流程。工作流技术可以帮助企业或组织更好地管理和优化业务流程&#xff0c;提高生产效率和质量&#xff0c;降低成本和风险。 JAVA作为一种面向对象编程语…

Java 3个常用工作流引擎

一&#xff1a;Java工作流框架是一种用于设计、执行和管理工作流程的技术。以下是几个常见的Java工作流框架&#xff1a; Activiti&#xff1a;Activiti是一款流行的开源Java工作流引擎&#xff0c;它基于BPMN 2.0标准&#xff0c;支持复杂的工作流程设计和管理。Activiti具有高…

Java 流行的工作流引擎

Java 流行的工作流引擎 JBPM 工作流 JBPM 是一个Java业务流程管理系统&#xff0c;是JBoss中一款开源的工作流引擎&#xff0c;是一个轻量级的&#xff0c;使用BPMN 2规范可扩展的 工作流引擎&#xff0c;也是一个工作流管理系统&#xff0c;它可以运行在任何java环境&#x…

Java工作流有哪些?如何快速掌握Java技术

工作流是什么?工作流是指两个或两个以上的人&#xff0c;为了共同的目标&#xff0c;连续的以串行或并行的方式去完成某一业务。Java工作流就是一个基于Java开发的流程框架&#xff0c;是每一个参加郑州Java软件开发培训的学员需要掌握的入门知识。那么常见的Java工作流有哪些…

JAVA工作流

一、 什么是工作流 以请假为例&#xff0c;现在大多数公司的请假流程是这样的 员工打电话&#xff08;或网聊&#xff09;向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑 采用工作流技术的公司的请假流程是这样…

java工作流详解

什么是工作流&#xff1f; 工作流&#xff1a;两个或两个以上的人&#xff0c;为了共同的目标&#xff0c;连续的以串行或并行的方式去完成某一业务。 业务&#xff1a;工作流所指业务涵盖了与经营相关的活动。 串行或并行&#xff1a;业务中的步骤也许以一步接着一步的方式…