private void SearchBox_TextChanged(object sender, TextChangedEventArgs e) { // 1초 기다리는 타이머가 없다면 만든다. if (dt == null) { dt = new DispatcherTimer(); dt.Interval = new TimeSpan(0, 0, 0, 1, 500); // 1초 있다가 할일을 정의해주고 dt.Tick += (o, ea) => { SearchSiteItem siteItem = SearchSite.SelectedItem as SearchSiteItem; if (siteItem == null) { return; } // 더이상 수행은 멈추고 dt.Stop(); if (SearchBox.Text.Length == 0) { SearchResult.ItemsSource = siteItem.Site.Boards; return; } // 새로운 cancellation cancelTokenSource = new CancellationTokenSource(); searchResult = new ObservableCollection <IBoard>(); SearchResult.ItemsSource = searchResult; string text = SearchBox.Text; Task.Factory.StartNew(() => { App.Current.SiteManager.Search(text, cancelTokenSource.Token, siteItem.Site, board => { Dispatcher.BeginInvoke(() => { searchResult.Add(board); }); }); }); }; } // 1초를 기다리는 중이었고 // 취소 토큰이 있다면 if (cancelTokenSource != null) { cancelTokenSource.Cancel(); cancelTokenSource = null; } // 다시 시작 dt.Stop(); dt.Start(); }
private void SearchSite_SelectionChanged(object sender, SelectionChangedEventArgs e) { SearchSiteItem siteItem = SearchSite.SelectedItem as SearchSiteItem; if (siteItem == null) { return; } SearchResult.ItemsSource = siteItem.Site.Boards; SearchBox.Text = ""; }
// 즐겨찾기 갱신 private async void RefreshGalleryListButton_Click(object sender, EventArgs e) { if (!bLoadingCompleted) { MessageBox.Show("아직 목록을 다 읽어들이지 못했습니다. 목록을 다 읽어 들인 다음 새로고침 해주세요."); return; } // 현재 선택된 사이트에 대해서 갱신 SearchSiteItem siteItem = SearchSite.SelectedItem as SearchSiteItem; if (siteItem == null) { return; } ISite site = siteItem.Site; SearchBox.Visibility = Visibility.Collapsed; SearchResult.Visibility = Visibility.Collapsed; RefreshPanel.Visibility = Visibility.Visible; // dcinside 의존성을 여기에 씀 bool result = await Task.Factory.StartNew(() => { return(site.Refresh(OnRefreshStatusChangedEventHandler)); }); if (!result) { MessageBox.Show("갤러리 목록을 얻어내는데 실패했습니다. 잠시 후 다시 실행해보세요"); } SearchResult.ItemsSource = site.Boards; SearchBox.Text = ""; SearchBox.Visibility = Visibility.Visible; SearchResult.Visibility = Visibility.Visible; RefreshPanel.Visibility = Visibility.Collapsed; }