using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.CompilerServices;
using System.Windows.Forms;
namespace TestProject
{
public class InvokeProxy
{
private System.Windows.Forms.Control _Control;
private static Dictionary<System.Windows.Forms.Control, InvokeProxy> _InvokeProxys = new Dictionary<System.Windows.Forms.Control, InvokeProxy>();
protected event EventHandler<InvokeArgs> Event_Invoke;
protected InvokeProxy(System.Windows.Forms.Control c, EventHandler<InvokeArgs> invokeEvent)
{
if ((c != null) || (invokeEvent != null))
{
this._Control = c;
this.Event_Invoke = invokeEvent;
}
}
private static void c_Disposed(object sender, EventArgs e)
{
System.Windows.Forms.Control key = sender as System.Windows.Forms.Control;
if ((key != null) && _InvokeProxys.ContainsKey(key))
{
_InvokeProxys.Remove(key);
}
}
public static void CreateInvokeProxy(System.Windows.Forms.Control c, EventHandler<InvokeArgs> invokeEvent)
{
if ((((c != null) && !c.IsDisposed) && (invokeEvent != null)) && !_InvokeProxys.ContainsKey(c))
{
c.Disposed += new EventHandler(InvokeProxy.c_Disposed);
_InvokeProxys.Add(c, new InvokeProxy(c, invokeEvent));
}
}
protected void Do(InvokeArgs e)
{
if (((this._Control != null) && !this._Control.IsDisposed) && (this.Event_Invoke != null))
{
if (this._Control.InvokeRequired)
{
this._Control.Invoke(this.Event_Invoke, new object[] { this._Control, e });
}
else
{
this.Event_Invoke(this._Control, e);
}
}
}
public static void Do(System.Windows.Forms.Control c, InvokeArgs e)
{
try
{
if (((c != null) && !c.IsDisposed) && _InvokeProxys.ContainsKey(c))
{
_InvokeProxys[c].Do(e);
}
}
catch (Exception exception)
{
Console.Write(string.Format("Errro in InvokeProxy{0}", exception.Message));
}
}
protected System.Windows.Forms.Control Control
{
get
{
return this._Control;
}
}
}
public class InvokeArgs : EventArgs
{
private string _Type;
private string _Text;
private object _Content;
public string Type
{
get
{
return this._Type;
}
set
{
this._Type = value;
}
}
public string Text
{
get
{
return this._Text;
}
set
{
this._Text = value;
}
}
public object Content
{
get
{
return this._Content;
}
set
{
this._Content = value;
}
}
public InvokeArgs()
{
}
public InvokeArgs(string type, string text, object content)
{
this.Type = type;
this.Text = text;
this.Content = content;
}
}
}