Reputation: 303
i try to call a method dynamically in other method, but this code dosn't work. how can i do it ?
#region Form1_Load()
private void Form1_Load(object sender, EventArgs e)
{
Load();
//this line
InitTimer(this.Form1_Load(sender,e));
}
#endregion
#region Timer()
public void InitTimer(dynamic _method)
{
System.Windows.Forms.Timer timer1;
timer1 = new System.Windows.Forms.Timer();
timer1.Tick += new EventHandler(_method);
timer1.Interval = 5000; // in miliseconds
timer1.Start();
}
#endregion
Upvotes: 0
Views: 136
Reputation: 754565
What you're looking for is a delegate. A delegate is essentially a method pointer which can be invoked later on.
private void Form1_Load(object sender, EventArgs e)
{
Load();
//this line
InitTimer(() => this.Form1_Load(sender,e));
}
public void InitTimer(Action target)
{
System.Windows.Forms.Timer timer1;
timer1 = new System.Windows.Forms.Timer();
timer1.Tick += (sender, e) => target();
timer1.Interval = 5000; // in miliseconds
timer1.Start();
}
Upvotes: 2
Reputation: 1411
#region Form1_Load()
private void Form1_Load(object sender, EventArgs e)
{
Load();
//this line
InitTimer(OtherLoad);
}
#endregion
#region Timer()
private void OtherLoad(object sender, EventArgs e)
{...}
public void InitTimer(EventHandler _method)
{
System.Windows.Forms.Timer timer1;
timer1 = new System.Windows.Forms.Timer();
timer1.Tick += _method;
timer1.Interval = 5000; // in miliseconds
timer1.Start();
}
#endregion
IMPORTANT: make your timer call a different method (I used "OtherLoad") in order to avoid setting up the timer over and over again!
Upvotes: 0