InvokeOnMainThread не работает с " группой методов`
Примечание : я нашел обходной путь к своей проблеме еще до того, как спросил вопрос, но я все еще удивляюсь, почему он так себя ведет.
Я делаю обычный xamarin.приложение iOS, использующее async/await
, Mvvm
, ... ничего особенного на технологической стороне.
Я обнаружил, что следующий код (используя method group
) не работает:
ViewModel.PropertyChanged += (sender, e) => {
if (e.PropertyName != "MyProperty")
return;
InvokeOnMainThread (tableViewController.TableView.ReloadData);
};
Если я поставлю точку останова на InvokeOnMainThread
, я могу увидеть исключение:
Но тот же код с lambda expression
прекрасно работать.
ViewModel.PropertyChanged += (sender, e) => {
if (e.PropertyName != "MyProperty")
return;
InvokeOnMainThread (() => tableViewController.TableView.ReloadData ());
};
Часть меня подозревает ошибку, другая часть уже обвиняет мое невежество. Кто-нибудь знает, какая часть верна ?2 ответа:
Если вы посмотрите более внимательно на исключение, которое вы получаете, вы увидите следующее:
tableViewController.TableView MonoTouch.UIKit.UIKitThreadAccessException [...]
Проблема заключается в том, что вы извлекаете свойство TableView (которое должно быть сделано для создания делегата метода ReloadData) в фоновом потоке.