InvokeOnMainThread不适用于`method group`

时间:2013-10-03 09:45:48

标签: c# xamarin.ios async-await

  

注意:我甚至在询问之前就找到了解决问题的方法   问题,但我仍然想知道为什么它会像这样。

我正在使用async/awaitMvvm执行通常的xamarin.iOS应用程序,...在技术方面没什么特别的。

我发现以下代码(使用method group)并不起作用:

ViewModel.PropertyChanged += (sender, e) => {
    if (e.PropertyName != "MyProperty")
        return;
    InvokeOnMainThread (tableViewController.TableView.ReloadData);
};

如果我在InvokeOnMainThread上设置断点,我可以看到异常:

enter image description here

但使用lambda expression的相同代码可以正常工作。

ViewModel.PropertyChanged += (sender, e) => {
    if (e.PropertyName != "MyProperty")
        return;
    InvokeOnMainThread (() => tableViewController.TableView.ReloadData ());
};

我的一部分怀疑是一个错误,另一部分已经归咎于我的无知。谁知道哪个部分是对的?

2 个答案:

答案 0 :(得分:5)

如果你仔细观察你得到的例外情况,你会看到:

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

问题是你在后台线程上获取了TableView属性(必须完成以便为ReloadData方法创建一个委托)。

答案 1 :(得分:0)

tableView是UI元素,你不能从非UI线程访问ui元素(或他的属性)。