C#在程序正在使用时删除事件处理程序
有没有办法在程序运行时删除事件处理程序C#在程序正在使用时删除事件处理程序,c#,C#,有没有办法在程序运行时删除事件处理程序 textBox1.TextChanged += (s, a) => { JRPC.SetMemory(rgh, 0xc035261d, reverseBytes(textBox1.Text)); JRPC.SetMemory(rgh, 0xc035261c, getBytes(Encoding.ASCII.GetBytes(textBox1.Text + "\0"
textBox1.TextChanged += (s, a) =>
{
JRPC.SetMemory(rgh, 0xc035261d, reverseBytes(textBox1.Text));
JRPC.SetMemory(rgh, 0xc035261c, getBytes(Encoding.ASCII.GetBytes(textBox1.Text + "\0")));
};
我有上面的代码来实时编辑Xbox上的玩家代号。选中复选框后,它将发现事件处理程序。但是当我取消选中它时,我需要它来删除这个事件处理程序,我想我应该这样做(见下文)
但是我想知道是否有一种适当的方法可以一起删除事件处理程序,而不是让一个打开的处理程序什么都不做。您可以清除类中事件表单的调用列表,但在您的情况下,您只能从中取消订阅事件处理程序 由于您使用的是匿名方法,您也不能这样做,因此需要在某个地方保留该方法的引用,稍后您可以使用
-=
操作符将其从调用列表中删除
您可以将匿名方法提取到命名方法,如下所示:
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;
然后您将订阅此活动,如下所示:
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;
嗯…+=只需添加另一个处理程序(可以有多个)。你最好做一个实际的方法,当你完成它时,你可以很容易地-=你可以解释更多关于如何做的事情吗?我一直在四处寻找,发现了一些东西,但我对如何删除它非常困惑。@areed99添加了你如何做的例子。非常有效谢谢你,我更好地理解我做错了什么你的例子我很感激!