Как я могу отменить асинхронный делегат в C # 3.5?

Я искал в Google всю информацию по этой теме, но не могу найти почти никакой подходящей информации по этой теме.

Я хочу сделать следующее:

  1. Пользователь вводит один поисковый запрос -string в текстовом поле.
  2. Я жду 0,5 секунды, затем я начинаю BeginInvoke моего делегата, указывающего на метод поиска.
  3. Если пользователь снова вводит символ, я хочу отменить поиск и начать новый поиск с новым введенная строка.
  4. UI-Thread не должен быть заблокирован!

Как я могу сделать это с помощью C # 3.5?

UPDATE :

View :

private void OnTextChanged(...)
{
   if (SearchFormatEvent != null)
   {
       ICollection<object> collection = SearchFormatEvent("MySearchString");
       // Do stuff on the returned collection                            
    }
}

SearchProvider :

// This is the delegate invoked for the async search taking the searchstring typed by the user
    public delegate ICollection<object> SearchInputTextStrategy<T>(string param);

    public class SearchProvider : ISearchProvider
    {
        private ITextView _view;
        private SearchInputTextStrategy<object> searchInputDelegate;

        public SearchProvider(ITextView view)
        {
            _view = view;
            _view.SearchFormatEvent += new ConstructSearchFormatDelegate(CostructSearchFormat);
        } 

        private string SearchFormat(string param)
        { 
            // compute string

            return string.Empty; //...
        }

        public ICollection<object> CostructSearchFormat(string param)
        {
            var searchfilter = SearchFormat(param);

             IAsyncResult pendingOperation = searchInputDelegate.BeginInvoke("searchfilter",null,null);

            // How can I cancel the Async delegate ?

            ICollection<object> result = searchInputDelegate.EndInvoke(pendingOperation);

            return result;                
        }
    }
8
задан Cœur 18 January 2018 в 04:22
поделиться