2010-03-01 5 views
0

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

ответ

0

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

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

     button1.Text = message; 
    } 
0

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

 Смежные вопросы

  • Нет связанных вопросов^_^