0

ビュースレッドで経過するためにプレゼンターで 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);
4

1 に答える 1