How to set System.Timers.Timer in presenter in order to elapse in view thread?
Environment: C#, .NET 4.0 CP, WinForms
My current cod is here, but it doesn't work. I have to additionally "Invoke" in the view.
I cast view to ISynchronizeInvoke to build the code. Casting to Control doesn't help.
public class GeneratorPagePresenter : IGeneratorPagePresenter
{
private IGeneratorPage view;
private Timer timer;
public void SetView(IGeneratorPage generatorPage)
{
view = generatorPage;
timer = new Timer();
timer.Interval = 1000;
timer.AutoReset = true;
timer.SynchronizingObject = (ISynchronizeInvoke) view;
timer.Elapsed += Timer_Elapsed;
}
void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
view.UpdateProgress(percentage);
}
}
EDIT
Thanks to AnPasant comment (which mysteriously disapeared). I set SynchronizingObject as a parameter. It works fine, but the code looks something strange.
public void SetView(IGeneratorPage generatorPage, ISynchronizeInvoke sync)
{
view = generatorPage;
timer = new Timer();
timer.Interval = 1000;
timer.AutoReset = true;
timer.SynchronizingObject = sync;
timer.Elapsed += Timer_Elapsed;
}
This method is called by View as follows:
presenter.SetView(this, this);