OSDN Git Service

UserInfoDialogを破棄する前にユーザー情報の表示タスクが完了するまで待機する
authorKimura Youichi <kim.upsilon@bucyou.net>
Sun, 1 Jun 2014 02:13:59 +0000 (11:13 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 7 Jun 2014 13:23:02 +0000 (22:23 +0900)
https://sourceforge.jp/ticket/browse.php?group_id=6526&tid=33889

OpenTween/Tween.cs
OpenTween/UserInfoDialog.cs

index 401fbc4..0fe921d 100644 (file)
@@ -12149,14 +12149,18 @@ namespace OpenTween
             }
         }
 
-        private void doShowUserStatus(TwitterUser user)
+        private async void doShowUserStatus(TwitterUser user)
         {
-            using (var userinfo = new UserInfoDialog(this, this.tw))
+            using (var userDialog = new UserInfoDialog(this, this.tw))
             {
-                userinfo.DisplayUser = user;
-                userinfo.ShowDialog(this);
+                var showUserTask = userDialog.ShowUserAsync(user);
+                userDialog.ShowDialog(this);
+
                 this.Activate();
                 this.BringToFront();
+
+                // ユーザー情報の表示が完了するまで userDialog を破棄しない
+                await showUserTask;
             }
         }
 
index 1286011..3e9c233 100644 (file)
@@ -44,18 +44,6 @@ namespace OpenTween
     public partial class UserInfoDialog : OTBaseForm
     {
         private TwitterUser _displayUser;
-        public TwitterUser DisplayUser
-        {
-            get { return this._displayUser; }
-            set
-            {
-                if (this._displayUser != value)
-                {
-                    this._displayUser = value;
-                    this.OnDisplayUserChanged();
-                }
-            }
-        }
 
         private readonly TweenMain mainForm;
         private readonly Twitter twitter;
@@ -71,12 +59,12 @@ namespace OpenTween
             this.LabelScreenName.Font = this.ReplaceToGlobalFont(this.LabelScreenName.Font);
         }
 
-        protected virtual async void OnDisplayUserChanged()
+        public async Task ShowUserAsync(TwitterUser user)
         {
-            if (this._displayUser == null)
+            if (user == null || user == this._displayUser)
                 return;
 
-            var user = this._displayUser;
+            this._displayUser = user;
 
             this.LabelId.Text = user.IdStr;
             this.LabelScreenName.Text = user.ScreenName;
@@ -482,6 +470,8 @@ namespace OpenTween
             }
             else
             {
+                Task showUserTask = null;
+
                 if (TextBoxName.Modified ||
                     TextBoxLocation.Modified ||
                     TextBoxWeb.Modified ||
@@ -496,7 +486,7 @@ namespace OpenTween
                                 this.TextBoxLocation.Text,
                                 this.TextBoxDescription.Text));
 
-                        this.DisplayUser = user;
+                        showUserTask = this.ShowUserAsync(user);
                     }
                     catch (WebApiException ex)
                     {
@@ -524,6 +514,9 @@ namespace OpenTween
                 ButtonEdit.Text = ButtonEditText;
 
                 IsEditing = false;
+
+                if (showUserTask != null)
+                    await showUserTask;
             }
 
             this.ButtonEdit.Enabled = true;
@@ -558,7 +551,7 @@ namespace OpenTween
                 });
 
                 if (user != null)
-                    this.DisplayUser = user;
+                    await this.ShowUserAsync(user);
             }
             catch (WebApiException ex)
             {