Google을 위아래로 검색했지만 해당 주제에 대한 적절한 정보를 거의 찾을 수 없습니다. 텍스트 상자에C# 3.5에서 비동기 대리자를 취소하려면 어떻게해야합니까?
- 사용자 유형 단일 검색 문자열 :
는 내가 뭘하고 싶어하는 것은 이것이다.
- 0.5 초 기다렸다가 검색 메서드를 가리키는 대리자를 BeginInvoke 시작합니다.
- 사용자가 char을 다시 입력하면 검색을 취소하고 입력 한 새 문자열로 새 검색을 시작합니다.
- UI 스레드를 차단해서는 안됩니다!
C# 3.5를 사용하여 어떻게 할 수 있습니까?
UPDATE :
보기 :
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;
}
}
어떻게 당신이 배경 검색 방법을 산란하는에 취소를 알리기 위해
CancellationTokenSource
를 사용할 수 있습니까? – Lazarus코드 샘플을 업데이트했습니다! 위 참조! – Pascal
비협조적인 기능의 실행을 깨끗하게 중단 할 수는 없습니다. 이 기능이 정기적으로 검사하는 플래그가 필요합니다. 'CancellationToken'은 .net 4에서 이것을 수행합니다. 3.5에 내장 클래스가 있는지 전혀 모릅니다. – CodesInChaos