相关疑难解决方法(0)

如何从事件中删除所有事件处理程序

要在控件上创建新的事件处理程序,您可以执行此操作

c.Click += new EventHandler(mainFormButton_Click);
Run Code Online (Sandbox Code Playgroud)

或这个

c.Click += mainFormButton_Click;
Run Code Online (Sandbox Code Playgroud)

并删除事件处理程序,您可以执行此操作

c.Click -= mainFormButton_Click;
Run Code Online (Sandbox Code Playgroud)

但是如何从事件中删除所有事件处理程序?

.net c# events

348
推荐指数
8
解决办法
39万
查看次数

如何取消订阅C#中特定类的事件的所有处理程序?

基本前提:

我有一个房间,当一个阿凡达"进入"房间内的所有头像时,它会发布一个事件.当阿凡达离开房间时,我希望它删除该房间的所有订阅.

在将"阿凡达"添加到新房间并订阅新房间的活动之前,我怎样才能最好地取消订阅房间中所有活动的阿凡达?

代码如下:

class Room
{
   public event EventHandler<EnterRoomEventArgs> AvatarEntersRoom;
   public event EvnetHandler<LeaveRoomEventArgs> AvatarLeavesRoom;
   public event EventHandler<AnotherOfManyEventArgs> AnotherOfManayAvatarEvents;


   public void AddPlayer(Avatar theAvatar)
   {
      AvatarEntersRoom(this, new EnterRoomEventArgs()); 

      AvatarEntersRoom += new EventHandler<EnterRoomEventArgs>(theAvatar.HandleAvatarEntersRoom);

      AvatarLeavesRoom += new EventHandler<EnterRoomEventArgs>(theAvatar.HandleAvatarEntersRoom);

      AnotherOfManayAvatarEvents += new EventHandler<EnterRoomEventArgs>(theAvatar.HandleAvatarEntersRoom);          

   }

}

class Avatar
{
   public void HandleAvatarEntersRoom(object sender, EnterRoomEventArgs e)
   {
       Log.Write("avatar has entered the room");
   }

   public void HandleAvatarLeaveRoom(object sender, LeaveRoomEventArgs e)
   {
       Log.Write("avatar has left room");
   }

   public void HandleAnotherOfManayAvatarEvents(object sender, AnotherOfManyEventArgs e)
   {
       Log.Write("another avatar event has …
Run Code Online (Sandbox Code Playgroud)

.net c# events

33
推荐指数
2
解决办法
3万
查看次数

如何删除所有eventhandler

让我们说我们有一个代表

public delegate void MyEventHandler(string x);
Run Code Online (Sandbox Code Playgroud)

和一个事件处理程序

public event MyEventHandler Something;
Run Code Online (Sandbox Code Playgroud)

我们添加了多个事件..

for(int x = 0; x <10; x++)  
{
   this.Something += HandleSomething;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是..如何从事件处理程序中删除所有方法,假设一个人不知道它已被添加10(或更多或更少)次?

c# delegates event-handling

11
推荐指数
1
解决办法
8779
查看次数

这个事件处理程序代码会导致内存泄漏吗?

假设我派生了一个WPF控件,例如TextBox,我重写其中一个On-方法,例如OnInitialized

假设我这样做了: this.Initialized += delegate { };

如果包含此控件的窗口关闭 - 如果没有其他操作,这会导致内存泄漏吗?

如果这确实导致内存泄漏,那么实现Finalizer是否是一个足够的,最小的补救措施?

.net c# wpf

6
推荐指数
1
解决办法
664
查看次数

标签 统计

c# ×4

.net ×3

events ×2

delegates ×1

event-handling ×1

wpf ×1