したがって、3つのタスクを実行する必要があるメソッドがあります。最初のタスクは、並行して実行できる他の2つのタスクの前に完了する必要があります。これは私が今持っているものです(簡単にするために変更されました)
void facebookButtonClicked (object sender, EventArgs e)
{
View.Add (loadingOverlay);
AppDelegate.MobileService = new MobileServiceClient ("myserverUrl", "myApiKey");
var users= AppDelegate.MobileService.GetTable<User> ();
var identities= AppDelegate.MobileService
.GetTable ("Identities");
AppDelegate.MobileService
.LoginAsync (this, MobileServiceAuthenticationProvider.Facebook)
.ContinueWith (t => {
if (t.Status == TaskStatus.RanToCompletion) {
AppDelegate.mobileServiceUser = t.Result;
var task1 = users.InsertAsync(new User{BirthDate = DateTime.Now});
var task2 = identities.ReadAsync("");
Task.Factory.ContinueWhenAll(new Task[]{task1,task2},_=>{
if(task1.Status==TaskStatus.RanToCompletion && task2.Status== TaskStatus.RanToCompletion)
{
var token = task2.Result
.GetArray()[0]
.GetObject ()
.GetNamedObject ("identities")
.GetNamedObject ("facebook")
.GetNamedString ("accessToken");
SaveAuthorization (token);
NavigationController.PushViewController (new TabBarController (), false);
}
});
}});
}
問題は、(非同期コードでの初心者のImを除いて)「PushViewController」を実行しようとすると、次のようになります。
UIKit.UIKitThreadAccessException:UIKit整合性エラー:UIスレッドからのみ呼び出すことができるUIKitメソッドを呼び出しています
このコードをリファクタリング/変更して修正するにはどうすればよいですか?助けてください。