Ich habe google nach oben und unten gesucht, aber ich kann fast keine richtigen Informationen zu diesem Thema finden.Wie kann ich einen asynchronen Delegaten in C# 3.5 abbrechen?
Was ich tun möchte, ist dies:
- Benutzertypen eine einzige Such-Zeichenfolge in einem Textfeld.
- Ich warte 0,5 s dann beginne ich BeginInvoke meine Delegierten zeigen auf eine Suchmethode.
- Wenn der Benutzer erneut ein Zeichen eingibt, möchte ich die Suche abbrechen und eine neue Suche mit der neuen eingegebenen Zeichenfolge starten.
- Der UI-Thread darf nicht blockiert werden!
Wie kann ich das mit C# 3.5 tun?
UPDATE:
Ansicht:
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;
}
}
Wie zu signalisieren laichen Sie die Methode Hintergrund suchen? – Lazarus
Ich habe ein Codebeispiel aktualisiert! siehe oben! – Pascal
Sie können die Ausführung einer nicht kooperierenden Funktion nicht sauber stoppen. Sie benötigen eine Flagge, die diese Funktion regelmäßig überprüft. 'CancellationToken' macht das in .net 4, keine Ahnung ob es eine eingebaute Klasse in 3.5 gibt. – CodesInChaos