草庐IT

c# - 永远不会执行加载项事件

我使用“VisualStudio插件”向导创建了一个新的插件项目,现在,我正在尝试添加一些事件处理程序:publicvoidOnConnection(objectapplication,ext_ConnectModeconnectMode,objectaddInInst,refArraycustom){_applicationObject=(DTE2)application;_addInInstance=(AddIn)addInInst;_applicationObject.Events.BuildEvents.OnBuildBegin+=BuildEvents_OnBuildBegi

c# - 没有参数的 Event 应该定义自己的自定义 EventArgs 还是简单地使用 System.EventArgs?

我有一个当前定义的没有事件参数的事件。即它发送的EventArgs是EventArgs.Empty。在这种情况下,最简单的方法是将我的事件处理程序声明为:EventHandlerMyCustomEvent;我不打算向该事件添加任何事件参数,但将来可能需要更改任何代码。因此,我倾向于让我的所有事件始终创建一个从System.EventArgs继承的空事件参数类型,即使当前不需要事件参数。像这样:publicclassMyCustomEventArgs:EventArgs{}然后我的事件定义变成如下:EventHandlerMyCustomEvent;所以我的问题是:定义我自己的MyCus

c# - 是否可以在不创建派生类的情况下将数据传递给 EventArgs?

我有点懵。我知道我可以创建从EventArgs派生的类以获得自定义事件数据。但是我能以某种方式使用基类EventArgs吗?就像鼠标按钮点击一样,在订阅者方法中,总是有“EventArgse”参数。我能否以某种方式创建以这种方式传递数据的方法,我的意思是它们将在基本Eventargs中传递? 最佳答案 您可以通过通用类型方法使用EventArgs类。在此示例中,我将使用Rect类作为返回类型:publicEventHandlerSizeRectChanged;引发事件:if(SizeRectChanged!=null){Rectr=

c# - 将事件从 C 类通过 B 类传递到 A 类

我有A类,它实现了大量B类的实例。B类封装了C类的一个实例。C类引发需要由A类处理的事件。A类不需要知道C类。C类正在传回基于性能的统计数据,然后A类需要合并这些数据。如何在B类中创建事件并将它们连接起来,以便A类可以订阅B类的事件并接收来自C类的事件? 最佳答案 一个事件只不过是一对包装委托(delegate)字段的方法。您可以覆盖ClassB中添加和删除方法的默认实现,以将值直接传递给ClassC中的事件:publicclassClassB{privateClassCm_C=newClassC();publiceventEven

c# - 显式事件添加/删除,误解了吗?

我最近一直在研究内存管理,并且一直在研究如何管理事件,现在,我看到了事件订阅的显式添加/删除语法。我觉得很简单,添加/删除只是让我在订阅和取消订阅时执行其他逻辑?我明白了吗,还是还有更多?此外,当我在这里时,任何清理我的事件句柄的建议/最佳实践。 最佳答案 add/remove属性与其他成员使用set/get属性的逻辑基本相同。它允许您在注册事件时创建一些额外的逻辑,并封装事件本身。您为什么要这样做的一个很好的例子是在不需要时停止额外的计算(没有人正在收听该事件)。例如,假设事件是由计时器触发的,如果没有人注册该事件,我们不希望计时

c# - C#中事件的主要目的

我一直在检查我的一本C#书籍,我刚刚看到关于C#中的事件的一句话:事件的主要目的是防止订阅者相互干扰。不管它是什么意思,是的,实际上事件的工作方式与委托(delegate)非常相似。我一直在想为什么我应该使用事件而不是委托(delegate)。那么有谁能解释一下加粗部分吗?提前致谢。 最佳答案 真正的选择并不是在委托(delegate)和事件之间——它们是完全不同的东西。但是,您可以公开具有委托(delegate)类型的公共(public)属性或公共(public)字段。我想这就是您真正的意思。假设Button.Click是公共(p

c# - 我可以颠倒多播委托(delegate)事件的顺序吗?

当您在.NET中订阅事件时,订阅会添加到多播委托(delegate)中。当事件被触发时,委托(delegate)将按照它们被订阅的顺序被调用。我想以某种方式覆盖订阅,以便订阅实际上以反向顺序触发。这可以做到吗?如何做到?我想这样的东西可能是我需要的?:publiceventMyReversedEvent{add{/*magic!*/}remove{/*magic!*/}} 最佳答案 你不需要任何魔法;你只需要反转加法即可。编写delegate1+delegate2会返回一个新委托(delegate),其中包含delegate1中的方

c# - 这是在 C# 中无需空检查的情况下触发/调用事件的更好方法吗?

我见过的大多数代码都使用以下方式来声明和调用事件触发:publicclassMyExample{publiceventActionMyEvent;//couldbeaneventEventHandler,tooprivatevoidOnMyEvent(){varhandler=this.MyEvent;//copybeforeaccess(toaviodracecond.)if(handler!=null){handler();}}publicvoidDoSomeThingsAndFireEvent(){//...doingsomethingshereOnMyEvent();}}甚至R

c# - 一个事件监听器是否可以被限制为只有一个订阅者?

是否可以阻止多个订阅者订阅一个事件?我创建了一个快速示例片段来为我的问题提供一些背景信息,但遗憾的是我现在无法对其进行测试,因为我不在我的VS机器旁。目标是:如果没有订阅者则返回一个空列表。返回单个订阅者的返回值。如果有多个订阅者尝试订阅该事件,则抛出异常(这是问题的关键)。这可能吗?publicdelegateListGetWindowListDelegate();publicstaticeventGetWindowListDelegateGetWindowListEvent;publicListGetWindowList(){if(GetWindowListEvent==null)

c# - 使用参数调用事件处理程序

VisualStudio2008,C#3.0。我下面有一个调用事件处理程序的方法。我想将方法​​收到的两个参数传递给事件处理程序。我想做这样的事情:wc.DownloadDataCompleted+=wc.DownloadedDataCompleted(strtitle,placeid);这是否可能,如果可以,我将如何去做?代码片段:publicvoiddownloadphoto(stringstruri,stringstrtitle,stringplaceid){using(WebClientwc=newWebClient()){wc.DownloadDataCompleted+=w