我看这是一个语法错误的例子,看代码的本意应该是在添加事件处理程序时,如果有遇到同样的处理程序,则只添加一次。但代码有误。(会死循环)
那要怎么改呀??
@彬彬@科比:
下面是一个例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
var c = new MyClass();
c.U += c_U;
c.U += c_U;
c.RaiseEvent();
Console.Read();
}
static void c_U(object sender, EventArgs e)
{
Console.WriteLine("hello,world");
}
}
class MyClass
{
private EventHandler u;
/// <summary>
/// 一个自定义事件
/// </summary>
public event EventHandler U
{
add
{
//如果用户注册的事件处理程序是同一个,则只注册一次
if (u == null || !u.GetInvocationList().Contains(value))
u = (EventHandler)Delegate.Combine(u, value);
}
remove
{
//检查以便避免无效地删除
if (u != null && u.GetInvocationList().Contains(value))
u = (EventHandler)Delegate.Remove(u, value);
}
}
/// <summary>
/// 触发事件的代码
/// </summary>
public void RaiseEvent()
{
if (u != null) u(this, null);
}
}
}