2017-06-25 47 views
0

有没有办法在程序运行时删除事件处理程序?C#在程序正在使用时删除事件处理程序

textBox1.TextChanged += (s, a) => 
      { 
       JRPC.SetMemory(rgh, 0xc035261d, reverseBytes(textBox1.Text)); 
       JRPC.SetMemory(rgh, 0xc035261c, getBytes(Encoding.ASCII.GetBytes(textBox1.Text + "\0"))); 
      }; 

我有上面的代码来实时编辑Xbox上的玩家Gamertag。当它检查它的复选框将发现事件处理程序。但是当我取消它,我需要它来删除此事件处理我计算过,我只是做到这一点(见下文)

textBox1.TextChanged += (s, a) => 
      { 

      }; 

但我想知道是否有所有删除事件处理程序的正确方法而不是让一个开放的处理程序不做任何事情。

+1

Um ... + =只是增加了另一个处理程序(可以有很多)。你最好做一个你可以随时使用的实际方法 - 当你完成它的时候。 – Clay

回答

1

您可以清除类中事件表单的调用列表,但在您的情况下,您只能从中删除事件处理程序。

由于您使用的是匿名方法,因此您无法做到这一点,您需要在某处保留方法的引用,稍后可以使用-=运算符将其从调用列表中删除。

您可以提取您的匿名方法的命名方法是这样的:

private void MyMethod(object sender, EventArgs args) 
{ 
    JRPC.SetMemory(rgh, 0xc035261d, reverseBytes(textBox1.Text)); 
    JRPC.SetMemory(rgh, 0xc035261c, getBytes(Encoding.ASCII.GetBytes(textBox1.Text + "\0"))); 
} 

比你其订阅到这样的事件:

textBox1.TextChanged += MyMethod; 

如果你想删除它并没有在事件被调用时再调用它:

textBox1.TextChanged -= MyMethod; 
+0

你能否解释一下如何做到这一点,我一直在环顾四周,发现了一些东西,但我很困惑如何删除它。 – areed99

+0

@ areed99增加了如何做到这一点的例子。 – Deadzone

+1

完美工作谢谢你,我更好地理解我做错了感谢你的例子,我很感激! – areed99