InvokeOnMainThread()不一定在主线程上调用 - bug或功能?

时间:2011-11-30 13:48:04

标签: multithreading timer mono xamarin.ios ui-thread

我正在使用Timer并让它执行定期检查。如果测试条件为真,我启动一个线程让它做它必须做的事情。

如果在该线程内,我想更改我正在使用的InvokeOnMainThread()用户界面。但是由于线程是从Timer触发的,它已经是一个单独的线程,InvokeOnMainThread()将调用Timer的线程而不是真正的主线程。我通过装箱两个InvokeOnMainThread()电话来解决这个问题。

这是按预期工作还是Mono框架中的错误? 主线程是定义为触发当前线程还是应该返回“根”线程?

1 个答案:

答案 0 :(得分:1)

NSObject.InvokeOnMainThread主要是performSelectorOnMainThread:withObject:waitUntilDone:

的包装器

来自文档:

  

您可以使用此方法将消息传递到应用程序的主线程。主线程包含应用程序的主运行循环,并且是NSApplication对象接收事件的位置。

如果您填写http://bugzilla.xamarin.com的错误报告以及自包含的测试用例,我们可以深入了解它(看起来很奇怪)。