Автор: Sergey Teplyakov
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(),
// TextBox Button.
// TextBox ,
// Button
timer = new Timer(AsyncHandler),
}
private void button1_Click(object sender, EventArgs e)
{
timer.Change(1000, 1000),
}
private void AsyncHandler(object data)
{
tickCount++,
textBox1.Text = tickCount.ToString(),
}
private readonly System.Threading.Timer timer,
private int tickCount,
}
private void AsyncHandler(object data)
{
tickCount++,
Action<,int>, action = DoChangeTicks,
if (InvokeRequired)
{
Invoke(action, tickCount),
}
else
{
action(tickCount),
}
}
private void DoChangeTicks(int count)
{
textBox1.Text = tickCount.ToString(),
}
private void AsyncHandler(object data)
{
tickCount++,
Action action = () =>, textBox1.Text = tickCount.ToString(),
if (InvokeRequired)
{
Invoke(action),
}
else
{
action(),
}
}
/// <,summary>,
/// .
/// <,/summary>,
public static class ControlExtentions
{
/// <,summary>,
/// control.Invoke, .
/// <,/summary>,
/// <,param name=control>, <,/param>,
/// <,param name=doit>, <,/param>,
public static void InvokeIfNeeded(this Control control, Action doit)
{
if (control.InvokeRequired)
control.Invoke(doit),
else
doit(),
}
/// <,summary>,
/// control.Invoke, .
/// <,/summary>,
/// <,typeparam name=T>, <,/typeparam>,
/// <,param name=control>, <,/param>,
/// <,param name=doit>, <,/param>,
/// <,param name=arg>, <,/param>,
public static void InvokeIfNeeded<,T>,(this Control control, Action<,T>, doit, T arg)
{
if (control.InvokeRequired)
control.Invoke(doit, arg),
else
doit(arg),
}
}
private void AsyncHandler(object data)
{
tickCount++,
this.InvokeIfNeeded(
() =>, textBox1.Text = tickCount.ToString()
),
}