注册和取消EventHandler 事件绑定

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
 

通常注册事件处理程序有三种方式:

  1. 通过部署 feature,以 XML 声明方式注册到指定列表模板
  2. 通过部署 feature,以 XML 声明方式注册到指定内容模型
  3. 通过编程,访问 SPList/SPWeb.EventReceivers 属性的 Add 方法动态注册

这里展示第三种方法。

如何注册

private void button1_Click(object sender, EventArgs e)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite("网站名称"))
                {
                    using (SPWeb web = site.RootWeb)
                    {
                        SPList list = web.Lists["列表名称"];
                        string asmName = "CallCenterEvent, Version=1.0.0.0, Culture=neutral, PublicKeyToken= ae8dab1f1ede53e5";//程序集名称
                        string className = "CallCenterEvent.CallCenterEvent";//程序集中的类名
                        list.EventReceivers.Add(SPEventReceiverType.ItemAdded, asmName, className);
                        MessageBox.Show("OK");
                    }
                }
            });

        }

如何取消

 

private void button2_Click(object sender, EventArgs e)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
               using (SPSite site = new SPSite("网站地址"))
                {
                    using (SPWeb web = site.RootWeb)
                    {
                        SPList list = web.Lists["列表名称"];
                        string asmName = "CallCenterUnitEvent, Version=1.0.0.0, Culture=neutral, PublicKeyToken= c7869734ebdef00e";//程序集名称
                        string className = "CallCenterUnitEvent.CallCenterUnitEvent";//程序集中的类名
                        /*list.EventReceivers.Add(SPEventReceiverType.ItemUpdating, asmName, className);*/
                        SPEventReceiverDefinitionCollection eventReceivers = list.EventReceivers;
                        for (int i = 0; i < eventReceivers.Count; ) // can not use foreach due to the modification to the collection
                        {
                            SPEventReceiverDefinition def = eventReceivers[i];
                            if (def.Assembly == asmName && def.Class == className)
                            {
                                 def.Delete();               
                            }
                            else
                            {
                                i++;
                            }
                        }
                            MessageBox.Show("OK");
                    }         
                }
            });
        }

当然,包含 EventHandler 的程序集(示例中是 ForProgramDeployEventReceiver)必须以部署到 GAC。

每种 event type 都需要单独注册一次。

 

从零开始用C#写一个桌面应用程序(二)事件驱动与窗体交互 本文深入探讨了C#桌面应用程序开发中的事件驱动编程与窗体交互技巧。通过WinForm控件事件机制,详细解析了如何实现按钮点击响应、窗体间松耦合通信以及高级事件处理场景,帮助开发者掌握C#桌面应用开发的核心技术。 阅读详情

相关推荐

Unity3D技巧在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信

作者:王选易,出处:http://www.cnblogs.com/neverdie/欢迎转载,也请保留这段声明。如果你喜欢这篇文章,请点【推荐】。谢谢! 本文的参考博客:https://blog.csdn.net/wkkingsam/article/details/52403126 引子 在前面两篇文章: 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy ...

Arcobaleno 1974

C++使用线程池模拟异步事件处理机制

在C++很多框架中都有异步事件处理机制,这导致我们在看源码时经常很疑惑,难以理解,而其中包含的编程套路可能是一些成熟的技术,只是我们不熟悉,比如WebRTC中类似于Qt的信号槽机制,线程事件处理, 或者使用系统异步IO等等,如果看不懂这些套路,理解代码会很难,本篇博客来尝使用用C++线程池实现一种异步事件处理机制。

琅嬛福地 861

VB6.0 Event & WithEvent事件处理

Event 语句 定义用户自定义的事件。 语法 [Public] Event procedurename [(arglist)] Event 语句包含下面部分: 部分 描述 Public 可选的。指定该 Event 在整个工程中都是可见的。缺省情况下 Events 类型是 Public。应注意,事件只能在所声明的模块中产生。 pr...

FLY_THINK2012的博客 976

结合胡闹厨房游戏实例来介绍unity事件的使用

因此,OrderListUI 类会订阅OrderManager 类中的 OnRecipeSuccessed 事件,当事件触发时,执行相应的处理逻辑。在这个方法中,调用了 UpdateUI 方法,更新游戏界面上的订单状态、显示得分、提示新的订单等信息,让玩家直观地了解游戏的进展。当玩家在游戏中完成了一道菜的所有制作步骤,比如把食材切好、烹饪到合适的程度、装盘等,上菜的时候游戏系统需要判定食谱制作是否成功。这是事件的名称,开发者可以根据具体的业务逻辑来命名,这里表示食谱成功完成的事件

qq_64875189的博客 834

Unity 事件管理中心

文章目录前言让唯一的事件管理中心统领全局事件管理中心组成部分脚本代码使用指南封装一些全局的脚本在别的类使用事件管理中心 前置知识: C#委托 事件 观察者(发布订阅)模式 前言 一个游戏中可以包含很多事件。比如游戏胜利事件,游戏失败事件,触发机关事件。这里再次回顾一下 C# 事件的概念: 一个类或者对象中的事件发生后会通知订阅了这个事件的其他类、其他对象。别的类、对象在接收到这个通知之后就会纷纷作出他们各自的响应。 那么从中可以看出,一个游戏对象的某个事件发生后,会去通知其他与之相关联的对象,然后会触发

qq_46044366的博客 1万+

Unity】 HTFramework框架(二) Event全局事件系统

索引Event模块简介使用Event自定义事件订阅事件抛出事件取消订阅事件 Event模块简介 在Event模块,可以将一切操作定义为具体事件,通过订阅事件、抛出事件以驱动整个业务逻辑! 使用Event 自定义事件 事件可以被订阅、取消订阅、抛出等,想要自定义事件,必须满足以下条件: 1.继承至EventHandler 推荐使用快捷创建方式: Project界面右键 -&amp;amp;gt; Create -&amp;amp;...

神码编程 4454

去除注册事件 c# winform

https://q.cnblogs.com/q/44720/ c# 如何remove MenuItem的Click事件的所有订阅(EventHandler)?0 悬赏园豆:160 [已关闭问题] 浏览: 1059次因为要对一大批MenuItem做相同操作,但不知道他们的Click事件都添加了哪些EventHandler,能否在只给出MenuItem对象的情况下,移除Click

u011500419的专栏 2608

【C#委托与事件深度解析】:揭秘高手都在用的异步编程核心机制

掌握C#异步编程核心,深入解析委托与事件机制。本文清晰阐述C#委托(Delegate)与事件(Event)区别,涵盖事件订阅、回调处理与内存管理等关键场景,揭示解耦设计与高效通信的核心方法。提升代码可维护性与扩展性,值得收藏。

AlgoFun的博客 612

C#委托事件

委托(delegate): 1、委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。 2、使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时,可以依次调用所有绑定的方法。 事件(Event): Event封装了委托类型的变量,使得在类的内部,不管你声明它是public还是protected,它总是private 的。在类的外部,注册“+=”注销“-=”的访问限定符与你在声明事件时使用的访问符相同。 使用方法: 委托关键字:delegate 1.声明一个委托 p

qq_43503580的博客 192

C#事件与委托:原理、应用与性能优化

在.NET编程中,委托作为类型安全的函数指针容器,构成了事件驱动编程的基础设施。其底层通过MulticastDelegate实现多播调用,而事件则是对委托的线程安全封装,提供可控的订阅模型。这种机制广泛应用于GUI开发、工业控制等场景,如WPF路由事件Modbus通信。针对内存泄漏问题,可采用弱事件模式优化;性能敏感场景则需注意委托调用方式选择,避免DynamicInvoke等开销较大的操作。理解C#事件与委托的底层原理,能帮助开发者构建更健壮的响应式系统,特别是在处理UI线程同步异步编程时尤为重要。

weixin_34194087的博客 305

Android点击事件全解析:从XML绑定到RecyclerView实战

在Android应用开发中,事件处理机制是连接用户交互与程序逻辑的核心桥梁。其基本原理是通过监听器模式,将用户操作转换为可响应的回调函数。掌握事件处理技术对于构建流畅、响应迅速的应用至关重要,它直接影响用户体验应用性能。在实际工程实践中,开发者需要根据场景选择合适的事件绑定方式,例如在简单的原型验证中可以使用XML声明,而在复杂的业务逻辑中则推荐使用代码动态设置监听器。特别是在处理列表交互等高频场景时,合理的事件绑定能有效避免内存泄漏性能问题。本文将深入探讨Android点击事件的多种实现方案,包括XM

weixin_30239339的博客 375

.NET Core开发日志——Middleware

熟悉ASP.NET架构的开发者一定对于HTTP Modules与HTTP Handlers不陌生。两者的作用主要是对网络请求执行特定的处理工作。而在.NET Core中,它们都被Middleware(中件间)取代了。 之前的Http ModulesHTTP Handlers是如下图般处理请求的: 现在变成了这样: 一言概括之,Middleware完成了HTTP Modules与HT...

aixing8475的博客 325

MAUI Windows应用集成Meadow物联网开发板模拟环境实战

在物联网嵌入式开发中,硬件抽象层与模拟环境是提升开发效率的关键技术。通过定义统一的硬件接口,将设备业务逻辑与具体硬件实现解耦,开发者可以在桌面环境中构建高度仿真的设备运行上下文。这一技术方案的核心价值在于实现软硬件协同开发的无缝衔接,显著降低对物理硬件的依赖,加速算法验证、UI设计自动化测试流程。在.NET技术栈中,结合MAUI框架的跨平台UI能力与Meadow开发板的嵌入式特性,可以构建出集设备逻辑模拟、数据可视化与控制于一体的桌面应用。本文以数字孪生模拟环境构建为例,详细解析了如何通过抽象层设计、

dengjuanshou7445的博客 390

CocosCreator组件生命周期:constructor与destroy的正确使用与内存管理

在游戏开发中,组件生命周期管理是确保应用稳定性性能的基础。理解生命周期函数的调用时机与原理,能有效避免内存泄漏运行时错误。组件初始化通常涉及资源加载、事件绑定等操作,而销毁阶段则需对称地释放这些资源,这是内存管理的核心原则。在CocosCreator引擎中,constructor并非传统意义的构造函数,其执行时组件依赖的节点属性可能尚未就绪,而destroy的调用与onDestroy的执行存在异步性,这要求开发者必须遵循引擎的规则。正确使用生命周期函数不仅能提升代码健壮性,还能优化内存使用,尤其在需要

weixin_30613433的博客 290

WPF MVVM模式中窗体关闭的四种优雅解决方案

在WPF开发中,MVVM模式通过数据绑定、命令依赖属性等机制实现了视图与业务逻辑的分离,提升了代码的可测试性可维护性。其核心原理是ViewModel通过属性变更通知驱动View更新,实现松耦合的UI交互。这一架构的技术价值在于支持复杂的用户界面逻辑,同时保持代码的清晰结构,广泛应用于桌面应用程序企业级软件开发。针对MVVM模式下窗体关闭这一常见需求,本文深入探讨了从简单的Boolean依赖属性绑定到高级的对话框服务与消息传递机制等多种实现方案,并结合WPF数据绑定Prism框架等热词,为不同场景下的

weixin_30258901的博客 471

基于AI代码生成工具Codex高效开发上位机数据采集软件实战

在工业自动化与物联网监控领域,上位机软件作为连接物理设备与信息系统的核心枢纽,承担着数据采集、处理、监控与控制的关键职责。其开发通常涉及串口/TCP通信、实时数据处理、图形界面设计及数据存储等复杂模块,对开发者的综合能力要求较高。借助AI代码生成技术,开发者可以快速构建软件基础框架,例如自动生成通信协议解析、数据滤波算法(如滑动平均滤波)及数据库操作等标准化代码,从而将精力集中于核心业务逻辑与系统架构设计。这种模式尤其适用于需要快速原型验证或应对常见开发场景(如电压采集软件中的噪声滤除)的项目,能显著提升开

weixin_30527323的博客 317

WinForms中实现MVVM模式的轻量级移植方案

MVVM是一种以职责分离为核心的软件架构模式,其核心在于View、ViewModel与Model三者通过INotifyPropertyChanged、ICommand等契约解耦协作。尽管WinForms原生不支持数据绑定与命令机制,但通过反射、接口抽象(如IView)手动事件绑定等技术手段,可构建出轻量、可控、可弃的MVVM实现。该方案显著提升遗留WinForms系统的可测试性、UI/业务逻辑协作效率及异步线程安全性,特别适用于需持续迭代又无法重构的制造业MES、金融风控、医疗设备等企业级桌面应用。本文即

lanmh的专栏 420

Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信...

作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明。如果你喜欢这篇文章,请点【推荐】。谢谢! 引子 在前面两篇文章: 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2DCollider2D 【Unity3D基础教程】给初学者看的Un...

weixin_30544657的博客 729

Unity(三)C#委托中的事件Event

PS:以前看Delegate还迷迷糊糊,今天刚好在一个插件中看到Event,很好用.例如当完成某个事情时告诉其他人做完了 感谢这位作者朋友,简单易懂实用http://www.cnblogs.com/promise-7/archive/2012/05/14/2500759.html   方式一: 代码模块: //事件中心  Class EventCenter { 声明方式1:  //声...

LinZhonglong的博客 1684
上一篇: 把AD中存在的用户启动为LCS用户(C#)
下一篇: Moss Handler 权限设置
凌珞
博客等级 码龄16年 46粉丝 75原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值