1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
/// <summary>
/// Classe utilisée pour envoyer les évènements en utilisant des thread distincts
/// </summary>
class MyThread
{
public delegate void ErrorHandler(Delegate d);
public event ErrorHandler Error;
object[] _args;
Delegate _target;
public MyThread(Delegate d, params object[] args)
{
this._target = d;
this._args = args;
}
public void Call()
{
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(CallDelegate));
}
void CallDelegate(Object stateInfo)
{
try
{
this._target.DynamicInvoke(this._args);
}
catch
{
if( Error!=null)
{
Error(this._target);
}
}
}
}
public void Unregister(Delegate d)
{
_UpdateDataHandler -= (UpdateDataHandler)d;
System.Console.WriteLine("Unregistered");
}
public void FireUpdateDataEvent()
{
if (_UpdateDataHandler != null)
{
UpdateDataHandler copie = _UpdateDataHandler;
foreach(Delegate d in copie.GetInvocationList())
{
MyThread t=new MyThread(d);
t.Error+=new MBServeur.MBFacade.MyThread.ErrorHandler(Unregister);
t.Call();
}
}
} |
Partager