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 2

2 ответа:

Если вы посмотрите более внимательно на исключение, которое вы получаете, вы увидите следующее:

tableViewController.TableView   MonoTouch.UIKit.UIKitThreadAccessException [...]

Проблема заключается в том, что вы извлекаете свойство TableView (которое должно быть сделано для создания делегата метода ReloadData) в фоновом потоке.

TableView-это элемент UI, вы не можете получить доступ к элементу ui(или его свойствам) не из потока not UI.