A common task is to do something in the background thread, then when done, pass the results to the UI thread and inform the user.
I understand there are two common ways:
I can use the TPL:
var context = TaskScheduler.FromCurrentSynchronizationContext ();
Task.Factory.StartNew (() => {
DoSomeExpensiveTask();
return "Hi Mom";
}).ContinueWith (t => {
DoSomethingInUI(t.Result);
}, context);
Or the Older ThreadPool:
ThreadPool.QueueUserWorkItem ((e) => {
DoSomeExpensiveTask();
this.InvokeOnMainThread (() => {
DoSomethingInUI(...);
});
});
Is there a recommended way to go when using MonoTouch to build iOS apps?
According to this document, mono touch provides access to ThreadPool and Thread:
http://docs.xamarin.com/ios/advanced_topics/threading
Also, you should call InvokeOnMainThread to update your UI.
While I prefer the syntax of Task Parallel Library the
ThreadPool
code base is older (in both Mono and MonoTouch) so you're more likely to find documentation for it and less likely to hit a bug.