MonoTouch - 线程化

时间:2011-11-11 01:05:42

标签: c# ios xamarin.ios threadpool task-parallel-library

一个常见的任务是在后台线程中执行某些操作,然后在完成后将结果传递给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应用程序时是否有推荐的方法?

2 个答案:

答案 0 :(得分:2)

虽然我更喜欢Task Parallel Library的语法ThreadPool代码库较旧(在Mono和MonoTouch中),因此您更有可能找到它的文档而不太可能命中bug 3}}

答案 1 :(得分:1)

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

  

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

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

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