Я использую шаблон MVC в приложении winforms. Мне нужно асинхронно вызывать удаленное обслуживание. Итак, на каком-либо событии в представлении я вызываю соответствующий метод Presenter. В Presenter я вызываю метод BeginInvoke. Но просмотр должен быть обновлен только в главной теме. Я мог бы называть CallBack на какой-либо функции в представлении и обновлять его состояние управления, но это конфликтует с шаблоном MVP - View не несет ответственности за данные, которые он несет. Эта функция обратного вызова должна быть в Presenter. Но как же вызвать View в главной теме?Как реализовать асинхронный шаблон в приложении форм Windows?
0
A
ответ
0
Включите функцию обратного вызова в презентаторе. Попросите докладчика вызвать любую функцию обновления на представлении или посмотреть, как наблюдают состояние ведущего и обрабатывают событие «завершено». В функции вида, если представление реализовано в форме окна, проверьте свойство InvokeRequired
, чтобы узнать, пришел ли вызов в поток Windows. Если это не так, используйте вместо этого Invoke
.
private void SetMessage(string message)
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => SetMessage(message)));
return;
}
button1.Text = message;
}
0
Вы принимаете форму? если да, вы можете вызвать yourForm.Invoke (поставить делегата здесь); , это вызовет делегата в основном потоке. Но почему вы хотите выполнить его в основном потоке? почему вы не можете выполнить в потоке обратного вызова?