当前位置: 首页 > news >正文

国内做视频的网站惠州外贸网站建设公司

国内做视频的网站,惠州外贸网站建设公司,安阳县地图,腾讯微信网站建设价格在 C# 中,事件的发布和订阅机制遵循以下规则:1. 默认行为:同步执行,阻塞发布线程如果事件订阅者(主线程)的处理方法是同步的,子线程在发布事件后会等待所有订阅者执行完毕,才会继续执…

在 C# 中,事件的发布和订阅机制遵循以下规则:

1. 默认行为:同步执行,阻塞发布线程

如果事件订阅者(主线程)的处理方法是同步的,子线程在发布事件后会等待所有订阅者执行完毕,才会继续执行后续代码。

Block_Test.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace WindowsFormsApp1
{public class Block_Test{// 定义一个委托类型public delegate void MyEventHandler(object sender, EventArgs e);// 定义一个事件public event MyEventHandler MyEvent;// 触发事件的方法public void TriggerEvent(){Console.WriteLine($"thread--{Thread.CurrentThread.ManagedThreadId}--");Console.WriteLine("事件触发前");// 触发事件,会调用所有注册的处理程序MyEvent?.Invoke(this, EventArgs.Empty);Console.WriteLine("事件触发后");}}
}

program.cs

         public Form1(){InitializeComponent();Console.WriteLine($"Form1--{Thread.CurrentThread.ManagedThreadId}--");signalThread = new Thread(publisher.TriggerEvent);signalThread.IsBackground = true; // 设置为后台线程//OnEventHandlerAsync();//异步订阅(不阻塞发布线程)// 注册事件处理程序publisher.MyEvent += Program_MyEvent;//阻塞发布线程// 触发事件//program.TriggerEvent();}public void Program_MyEvent(object sender, EventArgs e){//下面的代码发布线程会阻塞if (this.InvokeRequired)  // 判断是否需要切换线程{// 需要切换到主线程this.Invoke(new EventHandler(Program_MyEvent), sender, e);return;}Console.WriteLine($"mian--{Thread.CurrentThread.ManagedThreadId}--");Console.WriteLine("事件处理程序执行中");// 模拟一些工作System.Threading.Thread.Sleep(10000);this.button1.Text = "button2";Console.WriteLine("事件处理程序执行完毕");}

2. 异步执行:发布后立即继续(不阻塞)

如果需要子线程在发布事件后立即继续执行,可以在订阅时使用异步处理

        public Form1(){InitializeComponent();Console.WriteLine($"Form1--{Thread.CurrentThread.ManagedThreadId}--");signalThread = new Thread(publisher.TriggerEvent);signalThread.IsBackground = true; // 设置为后台线程OnEventHandlerAsync();//异步订阅(不阻塞发布线程)// 注册事件处理程序//publisher.MyEvent += Program_MyEvent;//阻塞发布线程// 触发事件//program.TriggerEvent();}private void OnEventHandlerAsync(){// 异步订阅(不阻塞发布线程)publisher.MyEvent += async (sender, e) =>{await Task.Run(() =>{Console.WriteLine("主线程:异步处理事件(模拟耗时操作)");Thread.Sleep(10000);Console.WriteLine("主线程:异步事件处理完成");});};}

http://www.dtcms.com/a/416767.html

相关文章:

  • 贷前风控策略:框架、准入、收紧、回捞、置换、定额...
  • 网站 留言 以邮件形式企业线上培训课程
  • 网站页面下载印度做爰免费网站视频
  • 公司自建网站备案岳阳市 网站建设
  • 网站建设企业属于什么类型的公司网站图片上传不上去怎么办
  • 做旅游攻略网站查询网站入口
  • 【ROS2】DDS通信协议介绍
  • 福州网站建设教程视频代理一个手游需要多少钱
  • 单网页网站制作竞价排名适合百度吗
  • 找工作在什么网站找比较好个人网站开发的意义
  • 做网站需要投入多少钱手工制作花
  • 企业网站源码 asp中国十大网络科技公司
  • 房城乡建设部网站上海建设部门网站
  • 网站网页翻页设计如何新建一个网页页面
  • 重庆怎么制作网站?比较著名的seo网站
  • 国内建筑设计网站网址安全中心检测
  • 网站建设 10万元部门网站 法规制度 建设情况
  • 门户网站规划方案wordpress 阅读插件
  • 怎么更改网站标题网站推广成本
  • 公司网站如何注册杭州盘石做网站专业吗
  • scala网站开发在县城做团购网站
  • 网站建设规划任务书用nas 做网站
  • 大二学生做网站难吗奉化网站建设报价
  • 网站建设中企动力强网站建设和维护自学
  • 网站主题页如何做外链
  • InnoDB表压缩调优实战指南
  • 快递公司网站源码seo与网站建设
  • 让人做网站需要准备什么条件自定义wordpress页面模板
  • 建设数码产品网站的策划书苏州网站建设孙峰
  • 建设直播网站软件河源网站建设 科技