public System.Threading.Tasks.Task<bool> Save(string mail, string password, System.IO.DirectoryInfo imgDir)
        {
            return System.Threading.Tasks.Task.Factory.StartNew(() =>
                {
                    var args = new SavingSettingEventArgs(mail, password, imgDir);
                    OnSavingSetting(args);
                    if (args.Cancel)
                        return false;

                    GPlusImageDownloader.Properties.Settings.Default.EmailAddress = mail;
                    GPlusImageDownloader.Properties.Settings.Default.Password = password;
                    GPlusImageDownloader.Properties.Settings.Default.ImageSaveDirectory = imgDir.FullName;
                    GPlusImageDownloader.Properties.Settings.Default.Save();
                    EmailAddress = mail;
                    Password = password;
                    ImageSaveDirectory = imgDir;

                    if (!imgDir.Exists)
                        try
                        {
                            imgDir.Create();
                            IsErrorNotFoundImageSaveDirectory = false;
                        }
                        catch { IsErrorNotFoundImageSaveDirectory = true; }
                    else
                        IsErrorNotFoundImageSaveDirectory = false;

                    OnSavedSetting(new EventArgs());
                    SerializeCookie(Cookies);
                    return true;
                });
        }
 protected virtual void OnSavingSetting(SavingSettingEventArgs e)
 {
     if (SavingSetting != null)
         SavingSetting(this, e);
 }
        void Setting_SavingSetting(object sender, SavingSettingEventArgs e)
        {
            //設定が変更された場合、その変更が有効なものであるかをチェックする
            //そして変更が無効である場合にはe.Cancel = trueにする事で設定変更
            //をキャンセルする。

            //EmailAddress, Passwordが空文字だった場合には設定保存をキャンセルする。
            if (string.IsNullOrEmpty(e.EmailAddress) || string.IsNullOrEmpty(e.Password))
            {
                e.Cancel = true;
                _cookies = null;
                return;
            }
            //EmailAddress, Passwordに変化がある場合、あるいはストリーム監視中でなかった場合
            //には再ログイン処理を行う。
            if (Setting.EmailAddress != e.EmailAddress || Setting.Password != e.Password
                || !Downloader.IsWatchingStream)
            {
                //変更されたログイン情報を元に再ログインする。ログインに失敗した場合には
                //e.Cancel = trueにする。成功した場合には_cookiesにログイン済みクッキーを入れ、
                //SavedSettingで設定変更が確定した時にSetting.Cookiesを更新する。
                e.Cancel = !ImageDownloaderContainer.CheckCanAuth(e.EmailAddress, e.Password, out _cookies);
                if (e.Cancel)
                    _cookies = null;
            }
            //何も変化が無く、ストリーム監視中だった場合には設定保存を許可しつつ、
            //後のSetting_SavedSettingでSetting.Cookiesを更新して再接続しないようにする。
            else
                _cookies = null;
        }