Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在程序正在使用时删除事件处理程序_C# - Fatal编程技术网

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添加了你如何做的例子。非常有效谢谢你,我更好地理解我做错了什么你的例子我很感激!