【问题标题】:MonoTouch - ThreadingMonoTouch - 线程
【发布时间】:2011-12-26 16:09:28
【问题描述】:

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

我理解有两种常见的方式:

我可以使用 TPL:

var context = TaskScheduler.FromCurrentSynchronizationContext ();

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

或者旧的线程池:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • ThreadPool 代码库是否仍然是更稳定的选择,或者它们在这一点上是否同样稳定?
    • 相当肯定它在今天相当可比......至少我不知道任何剩余的错误。目前正在对 Mono 3.0 (Xamarin.iOS 6.3 betas) 进行大量测试以支持异步。
    【解决方案2】:

    根据本文档,单声道触摸提供对 ThreadPool 和 Thread 的访问:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多