多线程的异步调用(一)

2023-11-15


最近手头做的项目中,用到了多线程的异步调用。在控制线程中实时的检测硬件的变化,如果硬件发生了某些变化,那么需要通知别的模块做一些相应的操作,为了让这些操作不会影响控制线程的继续运行,就在多线程中使用了异步调用的方法。

using System;

using System.Threading;

 

namespace WindowsApplication1

{

 

    public class Async

    {

        AsyncMenthod dlgt = new AsyncMenthod(DealClass.dealFunction);

 

        private int index = 0;

 

        public Async()

        {

            Thread controlThread = new Thread(new ThreadStart(ControlThreadProc));

            controlThread.Priority=System.Threading.ThreadPriority.AboveNormal;

            controlThread.IsBackground = true;

            controlThread.Start(); //启动一个线程     

        }

 

        public void ControlThreadProc()

        {

            while( index < 5 )

            {  

                index++ ;          

                dlgt.BeginInvoke(index,null,null);//进行异步调用,并且不要求回调等     

                Console.WriteLine( index.ToString() + " Called At "+System.DateTime.Now.ToString() );

                System.Threading.Thread.Sleep(100);

            }

        }

 

        public delegate void AsyncMenthod( int callID ); //和被异步调用的函数必须具有相同的参数,函数名可以不同

 

    }

    public class DealClass

    {

        public static void dealFunction( int callID ) //被异步调用的函数

        {

            Console.WriteLine( callID.ToString() + " Start Deal At "+System.DateTime.Now.ToString());

            System.Threading.Thread.Sleep(2000);

            Console.WriteLine( callID.ToString() +  "Deal Complete At "+System.DateTime.Now.ToString());

           

        }

    }

}

 

输出:

1 Called At 2004-10-6 19:44:01

1 Start Deal At 2004-10-6 19:44:01

2 Called At 2004-10-6 19:44:02

3 Called At 2004-10-6 19:44:02

4 Called At 2004-10-6 19:44:02

5 Called At 2004-10-6 19:44:02

2 Start Deal At 2004-10-6 19:44:02

3 Start Deal At 2004-10-6 19:44:03

4 Start Deal At 2004-10-6 19:44:03

1Deal Complete At 2004-10-6 19:44:03

5 Start Deal At 2004-10-6 19:44:03

2Deal Complete At 2004-10-6 19:44:04

3Deal Complete At 2004-10-6 19:44:05

4Deal Complete At 2004-10-6 19:44:05

5Deal Complete At 2004-10-6 19:44:05


从输出里,很明显的可以看出,控制线程中的函数,并没有等待处理函数处理完毕,而是直接返回,并继续往下执行了。

在处理函数中,它会把这些请求都处理,并且是这样进行处理的:

每来一个请求,它就开始进行处理(类似起一个独立的线程),它不并不会等待前面的处理完毕,然后再来处理新的请求。处理完毕后,返回。

 

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

多线程的异步调用(一) 的相关文章

  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • 使 .net web api 队列请求以“单线程”方式运行

    我们有一个 c net Web API 服务调用代码 该代码无法一次处理多个数据库请求 该系统适用于需求相对较小的账单在线支付 我们无法控制代码来进行可以解决问题的更改 另一个使用相同代码的小组使用 WCF API 和服务配置将并发请求限制
  • 如何在 sql server 中加密数据并在 .net 应用程序中解密

    我想加密 sql server 中的一些密码并让 c 应用程序解密它们 显然 我可以创建一个 SP 来解密所需的密码并将其传递给 c 应用程序 但这意味着通过网络发送明文密码 因此 我希望能够在 sql server 中加密我的密码 使用密
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 使用 NServiceBus FileShareDataBus 时清理文件

    我在 NServiceBus 3 中使用 FileShareDataBus 是否支持清理数据总线文件 如果不是 实现此目的的最佳实践是什么 例如如何确保该文件不是错误队列中消息的一部分 鉴于不可能知道消息在错误队列中停留多长时间 我通常会在
  • 线程睡眠和Windows服务

    我正在开发一个 Windows 服务 该服务存在一些问题Thread Sleep 所以我想我会尝试使用计时器 因为这个问题建议 在 Windows 服务中使用 Thread Sleep https stackoverflow com que
  • 变量替换为字符串

    我可以做类似的事情吗 s said s blah name blah 在 VB NET 中 写字越来越痛苦name said blah blah 在VB NET 14 对于VS2015 中 您可以使用字符串插值 https msdn mic
  • MS Source Server - 使用 srctool 查看时源流显然不存在

    我一直在尝试安装 MS 调试工具中的 MS Source Server 内容 目前 我正在通过 Subversion 索引命令运行我的代码 pdbs 该命令现在按预期运行 它为给定的 pdb 文件创建流并将其写入 pdb 文件 但是 当我在
  • 有没有办法将消息从 C#.NET 程序集(ActiveX)发送到 VB6 应用程序?

    本问答参考并可用于以下用途 目的 通过ActiveX dll从IE浏览器发送消息到vb6应用程序 从 ActiveX dll 向 vb6 应用程序发送消息 从 C net dll 发送消息到 vb6 应用程序 我读过了本文 http www
  • 是否有 .NET 库或 API 可以与 IIS 配置数据库交互/编辑它?

    或者我是否坚持使用自己的 XML 切割 功能 我想创建一个小型任务托盘应用程序 以便我可以快速将虚拟目录重新指向硬盘上的几个文件夹之一 一点背景 我的开发机器上的代码库有 3 个不同的 svn 分支 Current Production B
  • 自定义类的重写 bool() [重复]

    这个问题在这里已经有答案了 我想要的只是 bool myInstance 返回 False 并且 myInstance 在 if or and 等条件下计算为 False 我知道如何覆盖 gt 我试过这个 class test def bo
  • 从架构上来说,我应该如何用更易于管理的内容替换非常大的 switch 语句?

    EDIT 1 忘记添加嵌套属性曲线球 UPDATE 我选择了 mtazva 的答案 因为这是我的具体案例的首选解决方案 回想起来 我用一个非常具体的例子提出了一个一般性问题 我相信这最终让每个人 或者也许只是我 对问题到底是什么感到困惑 我
  • 为什么同时存在 System.Net.Http 和 System.Web.Http 命名空间?

    这只是一个简单的问题 因为我正在研究 NET 中可用的各种类库 我注意到有一个System Net Http命名空间和一个System Web Http命名空间 这两个命名空间都有什么用途 创建两个看似不明确的命名空间的动机是什么 是否有任
  • 使用实体框架从 2 个表返回数据

    我正在使用 MVC3 和实体框架 但我需要来自不同表的更多数据 通常我会做这样的事情来从表中获取数据 Table Users id username 在代码中我会做这样的事情来获取所有用户 public static IEnumerable
  • 如何防止在 ActiveX 方法调用期间重新进入 WPF 事件处理程序?

    我们从 WPF 和 STA 应用程序中调用 ActiveX 组件上的方法 此调用是通过以下方式后期绑定执行的 res ocx GetType InvokeMember methodName flags null ocx args 其中 oc
  • WPF DataGrid 验证/绑定模式错误

    我创建了一个非常简单的新项目 仅测试 Microsoft WPF DataGrid 行为 不涉及其他 我只使用标准的 DataGrid
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • DataTable.GetChanges() 不断返回 NULL

    我正在尝试获取存在于的所有行allData但不在removeData public static DataTable RemoveDuplicateRows DataTable allData DataTable removeData re
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个

随机推荐

  • 【华为】Redis客户端API使用(java)

    1 概述 目标读者 本文档专供需要Redis客户端API调用的开发人员 适用于具备Java开发经验的开发人员 简介 Redis客户端通过API调用 向Redis发起命令调用 向Redis或写入或读出数据 基本概念 Redis服务端 提供服务
  • 计算机cpi的公式,EAC=BAC/CPI;EAC=AC+( BAC-EV)/CPI公式分别在什么情况下使用?

    EAC BAC CPI EAC AC BAC EV CPI公式分别在什么情况下使用 来源 信管网 2018年10月30日 所有评论 横渡大漠 cnitpm com 08 21 35 帮忙解释一下 什么情况下用EAC BAC CPI 算 什么
  • 木兰开源社区分论坛

    ChinaOSC 2022 木兰开源社区 技术论坛将于 2022年8月21日15 00 17 30 在陕西省西安高新国际会议中心 会议室 召开 聚焦开源许可证与标准 探索开源发展模式 为国内开源产业打地基 木兰开源社区做了什么 还要怎么做
  • 黑客攻防入门(二)shellcode构造

    1 概说 shell我们都知道是什么了吧 狭义的shellcode 就是一段可以运行shell的代码 构造一段shellcode的作用就是为了在缓冲区溢出时将shellcode的地址覆盖掉正常的返回地址 shellcode通常放在缓冲区内
  • 视觉工程师手写文档之优秀程序员指南篇

    首先 这是我从第一次开始走出校园就一直在完善的一些指南 本来是给自己看的 但现在离职期间再翻看到之后 感触良多 就做了分享 里面很多内容是我在CSDN技术博客上看到的 我认为写的很好的 有些是我自己的总结 大家看看就好
  • Android 中简单计时器的实现方法(Handler和TimerTask)

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 方法一 用handler线程创建计时器 计时器效果如下 第一步 写xml文件
  • 09-1_Qt 5.9 C++开发指南_Qchart概述

    Qt Charts 可以很方便地绘制常见的折线图 柱状图 饼图等图表 不用自己耗费时间和精力开发绘图组件或使用第三方组件了 本章首先介绍 Qt Charts 的基本特点和功能 以画折线图为例详细说明 Qt Charts 各主要部件的操作方法
  • 算法基础课:第一讲——基础算法

    文章目录 前言 排序 1 快速排序 作用 算法思想 模板 例题 AC代码 2 归并排序 作用 算法思想 模板 例题 AC代码 二分 1 整数二分 作用 算法思想 模板 例题 AC代码 总结 2 浮点数二分 算法思想 模板 例题 AC代码 高
  • vue中ref的使用

    今天看了别人写的代码 有些地方不太理解 查阅资料之后真的是受益匪浅 在这里分享给大家
  • 从0到1使用 Webpack5 + React + TS 构建标准化应用

    前言 本篇文章主要讲解如何从一个空目录开始 建立起一个基于webpack react typescript的标准化前端应用 技术栈 webpack5 React18 TS 工程化 eslint prettier husky git hook
  • 田志刚:个人知识管理常用软件、工具介绍

    一把菜刀 厨师可以用来做出可口的美味佳肴 也可以被犯罪分子利用作为伤害人的凶器 这就是工具的特性 个人知识管理的工具 软件也是如此 个人知识管理工具 软件和系统是个人管理自己知识的一个热点问题 我们认为在工具的选择和使用上主要需做到知理 知
  • 文件对象MultipartFile和文件对象File的使用方法

    1 前端上传的文件对象file public String upload MultipartFile file throws IOException String originalFilename file getOriginalFilen
  • 如何轻松实现内网穿透?异地办公?调试微信小程序?

    步骤很简单 只需三步 1 从 https www i996 me 获取获取你的公网域名和访问Token 项目托管在 https github com bugfan i996 2 在Max Linux 环境下 Windows类似 打开一个终端
  • AD20.0.1上手教程——机器狗

    我们假装已经安装好了AD 首先 我们先理一下AD这个软件的逻辑 一个项目包含一个工程 PrjPCB 里面有一个源文件和库文件两类 源文件包括原理图 SchDoc 和印制版图 PcbDoc 库文件包括封装库 PcbLib 和原理图库 SchL
  • [Python微信开发] 一.itchat入门知识及微信自动回复、微信签名词云分析

    最近准备学习微信小程序开发 偶然间看到了python与微信互动的接口itchat 简单学习了下 感觉还挺有意思的 故写了篇基础文章供大家学习 itchat是一个开源的微信个人号接口 使用python调用微信从未如此简单 使用不到三十行的代码
  • Qt5 Alpha Complie in XP with Mingw/vs2008

    根据 http qt project org wiki Qt 5 Alpha building instructions 提示 下载 Perl http www perl org get html python http python or
  • unity中使用tensorflow 深度学习框架 ml-agents v0.8,TFSharpPlugin.unitypackage 0.5最新版 教程(for mac windows)

    unity tensorflow 环境安装 unity tensorflow 官方 教程 unity版本必须经过配置 不像c 那样简单 第一部分 安装tensorflow环境 1 安装anaconda anaconda 是python的包管
  • 动态数组的摊销分析【Python也有数组的类似概念比如list】

    我先说一下数组版的动态数组的摊销分析 我先上C 的代码 没有摊销的 吧 应该都能看懂吧 即使没学过C和C pragma once include
  • 给出一组数删除其中的几个使得剩下的数从左到右最小

    个人感觉是个特别经典的题目 有两个关键点 1 剩下的数最小 2 删除的数小于等于n 1 使剩下的数最小 思路 依次遍历正整数的各位数字 将单调递减区间的的第一个数删掉 如果整个字符串已经单调递增就删除最后的数 代码如下 include
  • 多线程的异步调用(一)

    最近手头做的项目中 用到了多线程的异步调用 在控制线程中实时的检测硬件的变化 如果硬件发生了某些变化 那么需要通知别的模块做一些相应的操作 为了让这些操作不会影响控制线程的继续运行 就在多线程中使用了异步调用的方法 using System