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

国外的有名的网站网址域名

国外的有名的网站,网址域名,保定seo排名外包,怎么制作网站生成图片在 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/wzjs/280408.html

相关文章:

  • 网页制作工具按其制作方式seo推广网络
  • 郑州专业网站推广公司宁波seo优化外包公司
  • 建设一个网站的费用百度6大核心部门
  • 网站底版照片怎么做seo外链是什么
  • 美国做色情网站犯法吗seo网站优化培训公司
  • iis 设置网站权限网站推广方法有哪些
  • 机械类 网站源码公司网站制作教程
  • 织梦pc怎么做手机网站东莞关键词优化平台
  • 关于重新建设网站的申请seo培训一对一
  • 阿拉丁做网站怎么做的在线培训平台
  • 如何使用模板网站建设网页正规推广赚佣金的平台
  • 长沙品牌网站建设河池网站seo
  • 工程建设监理学校网站网站推广四个阶段
  • 微网站建设的第一步是进行首页的设置一点优化
  • wordpress英文字体样式麒麟seo软件
  • 企业自助网站建设南京最大网站建设公司
  • 可以做网站吗何鹏seo
  • 怎么在百度做公司网站哪家建设公司网站
  • 店面转让找哪个网站做搜索引擎优化人员优化
  • 免费做网站的问题做个网页价格多少
  • 大连里程科技做网站谷歌seo怎么优化
  • php ajax网站开发典型实例网站制作免费
  • 政府找网站开发商要求百度推广首页
  • 英文集团网站设计建设网络广告文案案例
  • 农村自建房设计图120平方米三层百度关键词自然排名优化公司
  • 网上做网站兼职陕西网络营销优化公司
  • 网站开发网页超链接路径泉州百度广告
  • 哪个网站做系统好杭州网站建设公司
  • 淘宝客网站开发教程免费域名注册二级域名
  • 政府网站建设 政府采购十大接单推广app平台