ビュースレッドで経過するためにプレゼンターで System.Timers.Timer を設定する方法は?
環境: C#、.NET 4.0 CP、WinForms
私の現在のタラはここにありますが、動作しません。ビューでさらに「呼び出す」必要があります。
ビューを ISynchronizeInvoke にキャストしてコードをビルドします。コントロールへのキャストは役に立ちません。
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);
}
}
編集
AnPasant のコメント (不思議なことに消えてしまいました) に感謝します。SynchronizingObject をパラメーターとして設定します。正常に動作しますが、コードが奇妙に見えます。
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;
}
このメソッドは、View によって次のように呼び出されます。
presenter.SetView(this, this);