.NET Framework中的事件

利用.NET Framework系统事件管理服务与消息队列 本文深入探讨了.NET Framework中的SystemEvents类如何用来监听系统事件,并通过ServiceController类管理Windows服务。同时,介绍了如何使用消息队列进行跨应用程序通信,并提供了一些高级技巧,例如如何重定向控制台输出到文件,以及如何监控和记录应用程序执行过程中的输出。 阅读详情

.NET Framework中的事件

 

事件体系结构

引 发事件的对象叫做事件源。事件源发布它可以引发的事件。事件的类型总是委托类型,这个委托类型的签名定义了处理该事件的方法的签名。定义事件处理程序方法 的对象称为事件接收方。事件接收方预订要在事件源上处理的事件事件接收方提供的事件处理程序方法必须与为该事件预订的方法签名一致。事件源利用多播委托跟 踪这些事件处理程序方法。当发生重要情况时,事件源引发事件,当事件引发后,事件源自动利用它的金手委托调用在每个事件接收方上指定的事件处理程序方法。

 

事件和委托的关系

一个事件(Event)是一个对象发送的一个消息,用来表示一个动作发生了。而一个动作可以被用户操作或者其他程序所触发。触发事件的对象被事件发送者(Event Sender)调用:捕获处理事件的对象被事件接收者(Event Receiver)调用。

在事件通信中,事件的发送者不知道哪个对象或者方法将要去接收/处理发送过去的事件。因而在事件源和事件接收者之间就需要一个中间人存在,这个中间人就叫委托。

在使用事件的有效范围里,委托提供一种机制,在事件引发时为类指示要调用的方法。当事件引发时,使用委托作为被调用方法的指针,修改事件的类就不需要了解作为观测程序的类的任何信息。

 

定义事件

在连接事件和其处理程序方法之前,需要定义一个其他对象关心的事件。用event关键字和指示方法签名的委托对象来定义事件,这个事件的所有事件处理程序都得遵循该委托对象指示的方法签名。

 

public event EventHandler Click;

 

根据约定,引发事件的行为在OnEventName方法中发生。

 

        public void OnClick(EventArgs e)
        {
            // 如果为事件注册了处理程序则引发该程序
            if (Click != null)
            {
                Click(this, e);
            }

        }

先进行检查,以确定存在事件,否则值为null。接着像调用方法一样调用事件来引发它,把对控件或类的this传递给它,指示它作为事件的发送者,把一个EventArgs类的新实例作为第二个参数。

 

使用事件

声明了事件和它相应的委托之后,希望对事件作出响应的对象就必须为这个事件添加一个事件处理程序。事件处理程序是一个方法,它的签名和与事件关联的委托相匹配,当事件引发的时候被调用。 

 

Object.EventName += new DelegateType(EventHandlerMethod);

 

    注意:当指派多个处理程序给一个事件的时候,处理程序的调用次序是没有保证的。因此不要指望处理程序会以一个特定次序出现。

 

EventHandler与EventArgs

EventHandler是.NET Framework中预定了一个用于事件的委托,它有两个参数:object类型参数以及System.EventArgs类型的参数。Object对象代表了事件发送者,EventArgs对象代表了事件包含的事件数据。

其实所有的事件处理方法都只有这两个参数,惟一不同的是,其他的某些事件处理方法的第二个参数会是System.EventArgs的一个子类,用于自定义一些我们需要的事件参数。

   

 

ASP.NET事件模型

ASP.NET的事件驱动是一种基于HTTP协议的技术,在ASP.NET中事件的触发和事件的处理是分别在客户端和服务器端进行的。一个事件在客户端被触发之后,会通过HTTP协议以POST的方式发送到服务器端,而服务器端则通过ASP.NET页面架构来进行相应的处理和反馈。

 

缓存事件
    
ASP.NET Framework提供给服务器端事件不是很多,因为事件驱动模型机制的实现是在客户端和服务器端分别实现的,之间需要通过HTTP协议方式来传递事件信息,因而如果频繁地触发各类事件会对整个Web站点产生很大的流量压力(如OnMouseOver事件)。但是,有些事件虽然也会频繁的触发但是必须提供(如Change事件),对于这种情况,ASP.NET Framework提供了一个折衷的办法,就是对于这类事件在触发时,不是立即将事件信息发送到服务器,而是缓存在客户端,等到再一次的事件信息被发送到服务器端时一同发送回去。因此,当这些缓存着的事件以及刚刚被触发的事件在服务器端被接收时,ASP.NET Framework不会按照特定的顺序去解释执行处理这些事件。

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// 说明:事件被缓存的示例
/// 作者:文野
/// 联系:stwyhm.cnblogs.com
/// </summary>

public partial class CacheEvent : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    
    /// <summary>
    
/// 说明:文本框的TextChanged事件,不会自动引发页面Postback
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        Response.Write("引发了文本框的TextChanged事件。<br />");
    }


    /// <summary>
    
/// 说明:下拉框的SelectedIndexChanged事件,不会自动引发页面Postback
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Response.Write("引发了下拉框SelectedIndexChanged事件。<br />");
    }


    /// <summary>
    
/// 说明:按钮的Click事件,引发页面Postback
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write("引发了按钮的Click事件。<br />");
    }

}

 
    由上面的示例我们看到,当按钮事件引发Postback时同时被缓存的另两个事件也运行了。

参考资料
    
《ASP.NET服务器控件高级编程》
    《Visual Basic .NET Power Coding》

    《ASP.NET服务器控件与组件开发》

    《ASP.NET深入解析》


Ubuntu 20.04 上 Geant4 安装避坑全记录:从源码编译到 B1 示例跑通(含数据包加速下载) 本文详细记录了在Ubuntu 20.04系统上从源码编译安装Geant4的全过程,包括环境准备、依赖安装、CMake参数解析、多线程编译优化以及数据包加速下载等关键步骤。特别针对B1示例的测试与验证提供了完整流程,帮助科研人员和学生避开常见安装陷阱,提升粒子物理模拟效率。 阅读详情

相关推荐

chmod: changing permissions of `/u01/app/oracle/product/11.2.0/dbhome_1/bin/extjobO‘: Operation not

oracle 11.2.0.4安装psu 29141056,日志末尾抛出报错 Patching component oracle.ctx, 11.2.0.4.0... Applying sub-patch '29141056' to OH '/u01/app/oracle/product/11.2.0/dbhome_1' Patching component oracle.rdbms, 11.2.0.4.0... Patching component oracle.rdbms.rman, 11.2.0.

m0_37625564的博客 1834

一点一点学ASP.NET之基础概念——事件

.NET Framework中的事件 事件体系结构引发事件的对象叫做事件源。事件源发布它可以引发的事件。事件的类型总是委托类型,这个委托类型的签名定义了处理该事件的方法的签名。定义事件处理程序方法的对象称为事件接收方。事件接收方预订要在事件源上处理的事件事件接收方提供的事件处理程序方法必须与为该事件预订的方法签名一致。事件源利用多播委托跟踪这些事件处理程序方法。当发生重要情况时,事件源

jelink的专栏 1109

(超详细)Qt入门和配置Visual Studio的Qt环境

内容写了Qt入门,创建并编写第一个Qt程序,以及配置VS编写Qt程序的环境。(超级详细)

LY549826LY549264的博客 7679

事件二(.NET事件)

 C#允许编写各种类型的事件,但是为了与.NET框架的组件相兼容,必须遵循Microsft建立的一系列规则。这些规则的核心是,事件处理程序必须拥有两个参数。  第一个参数是一个对事件发生器的对象引用,它指向产生该事件的对象;第二个参数是一个对EventArgs类或者其派生类的引用,它指定处理程序所需的其他信息。   .NET兼容的事件处理通常采取下面的形式:   void hand

kdmhh的专栏 734

5G LDPC编码实战:从校验矩阵到Matlab代码实现(附完整源码)

本文深入解析5G NR标准中的LDPC编码工程实现,聚焦于从3GPP协议中的QC-LDPC校验矩阵到高效Matlab代码的转换。文章详细阐述了基础矩阵(BG1/BG2)选择、提升因子确定以及利用双对角结构的快速编码算法,并提供了完整的、可优化的Matlab源码,旨在帮助通信算法工程师和开发者快速构建5G LDPC编码仿真原型,为硬件实现奠定基础。

table的专栏 377

2024年全国大学生信息安全竞赛安徽省赛网络系统建设与运维赛项-网络构建真题

该网络工程方案主要包含基础配置、有线网络、无线网络、出口网络、运维配置和SDN网络六个部分。基础配置包括设备接口设置、SSH服务开启和SNMP功能配置。有线网络部分重点部署VLAN、MSTP、VRRP和OSPF协议,实现网络冗余和负载均衡。无线网络规划了AP点位、信号覆盖和用户接入策略,包括SSID配置、频段优化和安全认证。出口网络配置了NAT转换、VPN隧道和流量审计功能。运维方面搭建了监控平台实时监测设备状态。SDN网络部分通过控制器实现流量管控。整个方案实现了多业务隔离、高可用性网络架构和

weixin_42221934的博客 1174

探索C#事件(Event)的强大应用

在现代软件开发中,对象之间的通信和交互是一个常见而重要的问题。为了解决这个问题,C#作为一种面向对象的编程语言提供了一种强大的特性:事件(Event)。事件可以帮助开发人员实现对象间的松耦合,提高代码的可读性和可维护性。本文将详细介绍C#事件的概念、使用方法以及实际应用场景,并通过丰富的示例代码帮助读者全面理解事件的魅力与威力。事件是对象所触发的动作或状态变化,它将通知其他对象执行相应的操作。// 定义事件参数类// 添加自定义属性set;// 定义事件发生器MyEvent?// 订阅事件并处理。

故事不长丨的博客 1780

【CSP-J/S初赛知识点整理】

CSP-J/S初赛知识点整理

qq_43884946的博客 1万+

ASP.net组件编程中的两种事件编写方法

ASP.net组件编程中的两种事件编写方法 版权声明:优快云是本Blog托管服务提供商。如本文牵涉版权问题,优快云不承担相关责任,请版权拥有者直接与文章作者联系解决。以下是组件代码:using System;using System.Web.UI;using System.Web.UI.WebControls;using System.ComponentModel;namespace

zhangqs_1981的专栏 941

Aloudata 荣登“数智技术系列榜单”和“数据智能服务商 TOP30”

持续助力各行业数智化先进企业突破数据管理技术瓶颈,以更加敏捷、精准和可靠的数据交付驱动企业业务创新与经营提效

Aloudata的博客 668

13、深入理解 Microsoft 365 的安全与合规概念

本文深入探讨了 Microsoft 365 的安全与合规概念,涵盖文档存储、文件共享、审计、保留、eDiscovery、分类和保护以及网络等多个关键方面。通过合理配置这些功能,组织可以更好地管理和保护其数据资源,满足法规要求,并提升工作效率。文章还提供了最佳实践建议及流程图,帮助读者全面理解 Microsoft 365 的安全架构和管理策略。

k8s6orchestrator的博客 212

ASP.NET中的事件处理

一、ASP.NET中的事件主要支持3个主要的事件组:1、包含在asp.net生成页面时自动生成,我们使用这些事件建立页面(如page_load等)2、包含了用户与页面交互时发生的所有事件(这种最强大)3、html内部的事件,这些事件在浏览器上执行(主要是由javascript来实现)。 在C#语言中,事件的处理主要有两种方法:1、委托式事件处理模式(Delegation Event Model...

weixin_34273479的博客 263

Python爬虫:爬取拼多多平台商品信息、销量、价格等数据

在本篇博客中,我们将深入探讨如何使用Python爬虫技术爬取拼多多平台的商品信息,包括商品的标题、销量、价格等详细数据。拼多多的商品页面通常是分页展示的,因此我们需要遍历多个页面,获取所有商品的信息。每个商品在拼多多平台上都有一个唯一的商品ID,我们可以通过该ID访问商品页面。通过以上的技术方案和代码示例,你已经掌握了如何使用Python爬虫获取拼多多平台上的商品信息、销量、价格等数据。等技术,解决拼多多平台的反爬虫机制,成功抓取我们所需的商品数据。,我们能够应对拼多多的反爬虫机制,稳定地获取到商品数据。

2201_76125261的博客 3657

.NET Framework事件设计准则

.NET Framework事件设计准则1、事件的命名准则应使用PascalCasing命名方式2、声明delegate时,使用void类型当作返回值,EventName事件的事件委托是EventNameEventHandler,事件接受两个传入参数,一律命为sender与e。3、定义一个提供事件数据的类。对类以EventNameEventArgs进行命名,从System.EventAr...

anku0825的博客 124

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

.Net Framework中的委托与事件

.Net Framework中的委托与事件尽管上面的范例很好地完成了我们想要完成的工作,但是我们不仅疑惑:为什么.Net Framework 中的事件模型和上面的不同?为什么有很多的EventArgs参数?在回答上面的问题之前,我们先搞懂 .Net Framework的编码规范:委托类型的名称都应该以EventHandler结束。委托的原型定义:有一个void返回值,并接受两个

淡蓝色的流星的专栏 302

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

.Net Framework中的标准委托和事件_1

.Net Framework中的标准委托,已经定义在命名空间System中, namespace System { public delegate void EventHandler(object sender, EventArgs e); } .Net Framwork类库中的所有事件均基于EventHandler委托。 其中EventArgs参数是可以自定义,必须继...

weixin_30855761的博客 241

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C#中的委托和事件--6..Net Framework中的委托与事件

.Net Framework中的委托与事件 尽管上面的范例很好地完成了我们想要完成的工作,但是我们不仅疑惑:为什么.Net Framework 中的事件模型和上面的不同?为什么有很多的EventArgs参数? 在回答上面的问题之前,我们先搞懂 .Net Framework的编码规范: 委托类型的名称都应该以EventHandler结束。委托的原型定义:有一个void返回值,并接受

qzsiniong的专栏 344

<转载>(四).Net Framework中的委托与事件

尽管 (委托、事件与Observer设计模式 )中的范例很好地完成了我们想要完成的工作,但是我们不仅疑惑:为什么.Net Framework 中的事件模型和上面的不同?为什么有很多的EventArgs参数? 在回答上面的问题之前,我们先搞懂 .Net Framework的编码规范: l 委托类型的名称都应该以EventHandler结束。 l 委托的原型定...

weixin_30784141的博客 138

.NET漫游指南-011-.NET Framework中处理和引发事件

参考网址:https://msdn.microsoft.com/zh-cn/library/edzehd2t(v=vs.110).aspx 在之前的几篇博文中主要是从实用角度来讲委托和事件委托以及事件的触发和调用,010,011等后续几篇blog主要从理论方向来进行解释。 在.NET Framework中事件是基于委托模式的。委托模式遵循观察者设计规范,观察者模式使得订阅者嗯那个够进行注册

爱敲键盘的猫 412

C#事件之 发布符合 .NET Framework 准则的事件

下面的过程演示了如何将符合标准 .NET Framework 模式的事件添加到您的类和结构中。 EventHandler delegate, which is defined as follows:" data-guid="7381964ce2595960b13411f64eee6823">.NET Framework 类库中的所有事件均基于 EventHandler 委托 EventHan

Android 爱好者 965

C#中的委托和事件 (6)---.Net Framework中的委托与事件

.Net Framework中的委托与事件 尽管上面的范例很好地完成了我们想要完成的工作,但是我们不仅疑惑:为什么.Net Framework 中的事件模型和上面的不同?为什么有很多的EventArgs参数? 在回答上面的问题之前,我们先搞懂 .Net Framework的编码规范: 委托类型的名称都应该以EventHandler结束。 委托的原型定义:有一个void返回值,并接受两个输入参数:...

weixin_30258027的博客 94

如何:发布符合 .NET Framework 准则的事件(C# 编程指南)

转载:http://msdn.microsoft.com/zh-cn/library/w369ty8x.aspx 下面的过程演示了如何将符合标准 .NET Framework 模式的事件添加到您的类和结构中。 .NET Framework 类库中的所有事件均基于 EventHandler 委托,定义如下: public delegat

348

.NET Framework 接收BeforeNavigate2事件BUG的替代方法

[.NET Framework 接收BeforeNavigate2事件BUG的替代方法] ????这是一篇微软网络上找到的文章,现在也许不适用了,但如果仍用.NET Framework 1.0,则只有这个方法可以解决这个问题了。 Liju Thomas [@online.microsoft.com] Regarding BeforeNavigate2 it a bug as menti

沐枫小筑 2465

C#事件(Event): 发布符合 .NET Framework Guidelines 的事件

本文翻译整理自:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-publish-events-that-conform-to-net-framework-guidelines 以下的示例展示了怎样添加符合 .NET Framework 模式事件到自定义的类和结构体中。.NET Frame...

我的的博客 102

发布符合 .NET Framework 准则的事件

(1)不生成事件数据。.NET Framework 类库中的所有事件均基于EventHandler委托。EventHandler是一个预定义委托,当不生成数据随事件一起发送时,该委托无需声明,因为它已在创建 C# 项目时包含的System命名空间中进行了声明。 EventHandler委托定义如下: //sender 是引发事件的对象 ...

wsoftware的博客 106
上一篇: VSS无法获取所有子目录
下一篇: 委托
mx5721
博客等级 码龄17年 24粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值