private async void stepButton_Click(object sender, RoutedEventArgs e) { progressBar.IsIndeterminate = true; stepButton.IsEnabled = false; if(humanResponse != null) { humanResponse.Dispose(); } if(skynetResponse!= null) { skynetResponse.Dispose(); } string cityName = cityTextBox.Text.Trim(); if (cityName == String.Empty || firstLetter.ToString() != cityName[0].ToString().ToUpper() && firstLetter != 0) { // Если город не на ту букву или отсутствует progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; if(firstLetter == (char)0) { MessageBox.Show("Напишите город на любую букву"); return; } else { MessageBox.Show(String.Format("Напишите город на букву '{0}'", firstLetter)); return; } } Dictionary<string, string> dict = new Dictionary<string, string>(); // Параметры для запроса к БД dict.Add("name", String.Format("N'{0}'", cityName)); dict.Add("disable", "'0'"); List<City> results; try { results = await Task.Run(() => { return LocalDbQuery.Select(dict); }); // Проверка существования города в БД } catch { progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; MessageBox.Show("Ошибка чтения базы данных!"); this.Close(); return; } if (results.Count == 0) { progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; MessageBox.Show("Города нет в базе или он уже использован!"); return; } foreach (City item in results) { historyListBox.Items.Insert(0, item); // Вывод города в историю игры LocalDbQuery.DisableCity(item.Id); // Пометка города как использованного } string humanCity = (historyListBox.Items[0] as City).Name; points++; humanResponse = Task.Run(() => // Запрос информации о городе с википедии { Action act = () => { humanTextBlock.Text = humanCity + "\n"; try { humanTextBlock.Text += JArray.Parse(new StreamReader(WebRequests.WikiRequest(humanCity).GetResponseStream()).ReadToEnd())[2][0].ToString(); } catch { } }; humanTextBlock.Dispatcher.Invoke(act); }); firstLetter = (historyListBox.Items[0] as City).Name.ToUpper().Last(); if (firstLetter == 'Ь' || firstLetter == 'Ы') { firstLetter = (historyListBox.Items[0] as City).Name.ToUpper()[(historyListBox.Items[0] as City).Name.Length - 2]; } dict = new Dictionary<string, string>(); // Параметры для запроса к БД dict.Add("first", String.Format("N'{0}'", firstLetter)); dict.Add("disable", "'0'"); try { results = await Task.Run(() => { return LocalDbQuery.Select(dict); }); // Проверка существования города в БД } catch { progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; MessageBox.Show("Ошибка чтения базы данных!"); this.Close(); return; } if (results.Count == 0) { isFinished = true; postButton.Visibility = Visibility.Visible; stepButton.Visibility = Visibility.Hidden; finishButton.Content = "Начать заново"; resultLabel.Content = String.Format("Вы набрали {0} баллов в игре!", points); progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; isWin = true; MessageBox.Show("Поздравляю! Вы выиграли компьютер!"); return; } string name = results[random.Next(results.Count)].Name; foreach (City item in results) { if (item.Name == name) { historyListBox.Items.Insert(0, item); // Вывод города в историю игры LocalDbQuery.DisableCity(item.Id); // Пометка города как использованного } } string skynetCity = (historyListBox.Items[0] as City).Name; skynetResponse = Task.Run(() => // Запрос информации о городе с википедии { Action act = () => { skynetTextBlock.Text = skynetCity + "\n"; try { skynetTextBlock.Text += JArray.Parse(new StreamReader(WebRequests.WikiRequest(skynetCity).GetResponseStream()).ReadToEnd())[2][0].ToString(); } catch { } }; humanTextBlock.Dispatcher.Invoke(act); }); firstLetter = (historyListBox.Items[0] as City).Name.ToUpper().Last(); if (firstLetter == 'Ь' || firstLetter == 'Ы') { firstLetter = (historyListBox.Items[0] as City).Name.ToUpper()[(historyListBox.Items[0] as City).Name.Length - 2]; } label.Content = String.Format("Введите город на букву '{0}':", firstLetter); cityTextBox.Text = String.Empty; progressBar.IsIndeterminate = false; stepButton.IsEnabled = true; }
private async void postButton_Click(object sender, RoutedEventArgs e) { postButton.IsEnabled = false; progressBar.IsIndeterminate = true; if (String.IsNullOrEmpty(access_token) || String.IsNullOrEmpty(user_id)) { // Если нет токена, авторизация с использованием протокола OAuth OAuthVk oauthvk = new OAuthVk(); oauthvk.ShowDialog(); access_token = oauthvk.Access_token; user_id = oauthvk.User_id; if(String.IsNullOrEmpty(access_token) || String.IsNullOrEmpty(user_id)) { progressBar.IsIndeterminate = false; return; } } dynamic result = await Task.Run(() => // Отправка поста на страницу ВК { string message = String.Format("Я набрал {0} баллов в игре \"Города\"!", points); if(isWin) { message += " Я победил компьютер!"; } HttpWebResponse response = WebRequests.PostVk(message, access_token, user_id); if (response == null) { return Task.FromResult<dynamic>(null); } StreamReader sr = new StreamReader(response.GetResponseStream()); dynamic json = JValue.Parse(sr.ReadToEnd()); return Task.FromResult<dynamic>(json); }); // Проверка ответа if(result.Result == null) { postButton.IsEnabled = true; progressBar.IsIndeterminate = false; MessageBox.Show("Проверьте подключеник к нтернету!"); return; } try { int post_id = result.Result.response.post_id; } catch { if (result.Result.error.error_code == 17) { access_token = null; user_id = null; postButton.IsEnabled = true; progressBar.IsIndeterminate = false; MessageBox.Show("Возникла ошибка авторизации. Попробуйте повторить попытку!"); return; } else { postButton.IsEnabled = true; progressBar.IsIndeterminate = false; MessageBox.Show("Не удалось опубликовать запись!"); return; } } postButton.IsEnabled = true; progressBar.IsIndeterminate = false; MessageBox.Show("Запись успешно опубликована на вашей стене во Вконтакте!"); }