2017-06-25 72 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