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