我有一个显示状态消息的控件;该控件在间隔后隐藏。这里是处理它的代码:无效扩展 - 中止/取消完成
private void ShowFor(TimeSpan? delay)
{
Visible = true;
if (!delay.HasValue) return;
// _pauseTimer is a MultipleAssignmentDisposable
_pauseTimer.Disposable = Observable
.Timer(delay.Value)
.ObserveOn(SynchronizationContext.Current)
.Subscribe(
onNext: _ => { /* do nothing */ },
onCompleted:() => { Visible = false; },
onError: e => { /* what could possibly go wrong? */});
}
显示控制,等待ñ秒,隐藏控制。十分简单。
问题是在此计时器过去之前另一条消息进入时该怎么办。第二条消息显示,然后第一个定时器到期并提前隐藏控件。
如何“中止”前一个计时器?处置pauseTimer.Disposable
?
我甚至从来没有想过让消息成为一个序列本身;非常聪明。我看到的唯一问题是,消息会因严重程度而异,而且并不都显示相同的时间量 - 有些则需要手动解散。你会如何弥补? –
编辑以反映您的意见,并处理不同的严重程度。 –