Window
在显示后{5}秒后自动隐藏(ShowWindow
方法)。它也可以手动隐藏(HideWindow
方法)。这是我目前的实施。
问题:当我打开然后手动关闭窗口时,它会在打开后立即隐藏到1秒。它不应该是设计的。原因是我用新的替换CTS,从不要求取消。我的CTS技能很差,无法正确理解如何正确实现这一点。
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;
}
}
答案 0 :(得分:2)
由于ShowWindow
查看HideErrorWindowCTS
,它会查看新更新的取消令牌来源,而不是您展示时与CTS对应的令牌窗户。只需获取该令牌的ahold并将其存储在等待之前的本地变量中,这样即使HideErrorWindowCTS
发生更改,在延迟完成后仍然需要检查相同的令牌。 / p>