using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
namespace Event
{
//windowsBase dll
class Program
{
static void Main(string[] args)
{
var dealer = new CarDealer();
var michael = new Consumer("Michael呵呵1");
WeakCarInfoEventManager.AddListener(dealer, michael);
dealer.NewCar("Mercedes");
var nick = new Consumer("Nick2哈哈");
WeakCarInfoEventManager.AddListener(dealer, nick);
dealer.NewCar("Ferrari");
WeakCarInfoEventManager.RemoveListener(dealer, michael);
//dealer.NewCar("Toyota");
Console.ReadKey();
}
}
public class CarInfoEventArgs : EventArgs
{
public CarInfoEventArgs(string car)
{
this.car = car;
}
public string car { get; private set; }
}
public class CarDealer
{
public event EventHandler<CarInfoEventArgs> NewCarInfo;
public void NewCar(string car)
{
Console.WriteLine("new car111 {0}", car);
if (NewCarInfo != null)
{
NewCarInfo(this, new CarInfoEventArgs(car));
}
}
}
public class WeakCarInfoEventManager : WeakEventManager
{
public static WeakCarInfoEventManager CurrentManager
{
get
{
WeakCarInfoEventManager manager = GetCurrentManager(typeof(WeakCarInfoEventManager))
as WeakCarInfoEventManager;
if (manager == null)
{
manager = new WeakCarInfoEventManager();
SetCurrentManager(typeof(WeakCarInfoEventManager), manager);
}
return manager;
}
}
public static void AddListener(object source, IWeakEventListener listener)
{
CurrentManager.ProtectedAddListener(source, listener);
}
public static void RemoveListener(object source, IWeakEventListener listener)
{
CurrentManager.ProtectedRemoveListener(source, listener);
}
protected override void StartListening(object source)
{
(source as CarDealer).NewCarInfo += CarDealer_NewCarInfo;
}
void CarDealer_NewCarInfo(object sender, CarInfoEventArgs e)
{
DeliverEvent(sender, e);
}
protected override void StopListening(object source)
{
(source as CarDealer).NewCarInfo -= CarDealer_NewCarInfo;
}
}
public class Consumer : IWeakEventListener
{
private string name;
public Consumer(string name)
{
this.name = name;
}
public void NewCarIsHere(object sender, CarInfoEventArgs e)
{
Console.WriteLine("{0}:car{1} is new", name, e.car);
}
bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object sender, EventArgs e)
{
NewCarIsHere(sender, e as CarInfoEventArgs);
return true;
}
}
public class Consumer2 : IWeakEventListener
{
private string name;
public Consumer2(string name)
{
this.name = name;
}
public void NewCarIsHere(object sender, CarInfoEventArgs e)
{
Console.WriteLine("2222{0}:car{1} is new", name, e.car);
}
bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object sender, EventArgs e)
{
NewCarIsHere(sender, e as CarInfoEventArgs);
return true;
}
}
}