Die Window
wird automatisch nach 5 Sekunden ausgeblendet, nachdem sie angezeigt wird (ShowWindow
Methode). Es kann auch manuell versteckt werden (HideWindow
Methode). Hier ist meine aktuelle Implementierung.CancellationTokenSource korrekt durch neue ersetzen
Das Problem: Wenn ich öffne und schließe dann das Fenster manuell einige Male hintereinander, verbirgt es sich dann sofort zu 1 Sekunde nach dem Öffnen. Es sollte nicht von Entwurf sein. Der Grund ist, dass ich CTS durch ein neues ersetze, und eine Löschung wird nie angefordert. Ich habe schlechte Fähigkeiten mit CTS und kann nicht daran denken, wie man das richtig umsetzt.
public class Window
{
public bool Visible { get; set; }
public CancellationTokenSource HideErrorWindowCTS { get; set; }
public async void ShowWindow()
{
Visible = true;
await Task.Delay(TimeSpan.FromSeconds(5));
if (!HideErrorWindowCTS.IsCancellationRequested)
{
Visible = false;
}
}
public void HideWindow()
{
HideErrorWindowCTS.Cancel();
HideErrorWindowCTS = new CancellationTokenSource();
Visible = false;
}
}
Vielleicht sollten Sie das _token_ an die Methode und nicht die Token-Quelle übergeben - dann können Sie ['CancellationToken.None'] (https://msdn.microsoft.com/en-us/library/system.threading verwenden. cancellingtoken.none (v = vs.110) .aspx), wenn Sie nicht möchten, dass es abbricht. – stuartd