Как реализовать асинхронный шаблон в приложении Windows Forms? - PullRequest
0 голосов
/ 01 марта 2010

Я использую шаблон MVC в приложении winforms. Мне нужно вызвать удаленный сервис асинхронно. Поэтому для некоторого события в View я вызываю соответствующий метод Presenter. В Presenter я вызываю метод обслуживания BeginInvoke. Но для просмотра необходимо обновить только в Главной теме. Я мог бы указать CallBack на какую-то функцию в View и обновить состояние ее элементов управления, но это противоречит шаблону MVP - View не должен отвечать за данные, которые он несет. Эта функция обратного вызова должна быть в Presenter. Но как тогда вызвать View в главной теме?

Ответы [ 2 ]

0 голосов
/ 01 марта 2010

Поместите функцию обратного вызова в докладчик. Попросите докладчика вызвать любую функцию обновления в представлении, которая требуется / чтобы представление наблюдало за состоянием докладчика и обрабатывало событие «завершено». В функции представления, если представление реализовано формой Windows, протестируйте свойство InvokeRequired, чтобы увидеть, поступил ли вызов в потоке Windows. Если это не так, используйте Invoke, чтобы вызвать его.

    private void SetMessage(string message)
    {
        if (InvokeRequired)
        {
            BeginInvoke(new Action(() => SetMessage(message)));
            return;
        }

        button1.Text = message;
    }
0 голосов
/ 01 марта 2010

принимаете ли вы свою форму с помощью View? если да, вы можете вызвать yourForm.Invoke (поставить делегат здесь); , это вызовет делегата в главном потоке. Но почему вы хотите выполнить его в главном потоке? почему вы не можете выполнить в потоке обратного вызова?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...