Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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           = "";
        }
Ejemplo n.º 3
0
        // 즐겨찾기 갱신
        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;
        }