MonoTouch – 线程化

一个常见的任务是在后台线程中执行某些操作,然后在完成后将结果传递给UI线程并通知用户。

我知道有两种常见的方法:

我可以使用TPL:

var context = TaskScheduler.FromCurrentSynchronizationContext (); Task.Factory.StartNew (() => { DoSomeExpensiveTask(); return "Hi Mom"; }).ContinueWith (t => { DoSomethingInUI(t.Result); }, context); 

或旧的ThreadPool:

  ThreadPool.QueueUserWorkItem ((e) => { DoSomeExpensiveTask(); this.InvokeOnMainThread (() => { DoSomethingInUI(...); }); }); 

使用MonoTouch构建iOS应用程序时是否有推荐的方法?

虽然我更喜欢任务并行库的语法,但ThreadPool代码库较旧(在Mono和MonoTouch中),因此您更有可能找到它的文档,并且不太可能遇到错误 。

根据此文档,mono touch提供对ThreadPool和Thread的访问:

MonoTouch运行时允许开发人员访问.NET线程API,既可以显式使用线程(System.Threading.Thread,System.Threading.ThreadPool),也可以在使用异步委托模式或BeginXXX方法时隐式使用。

http://docs.xamarin.com/ios/advanced_topics/threading

此外,您应该调用InvokeOnMainThread来更新您的UI。

Interesting Posts