// IDisposable IToastHostCore.SubscribeToastPushing(IObservable<IToastViewModel> observable) // { // return observable?.ObserveOn(RxApp.MainThreadScheduler) // .Subscribe(Pushing); // } private void Pushing(IToastViewModel viewModel) { if (viewModel == null) { return; } lock (_sync) { _queue.Enqueue(viewModel); } }
protected internal void ToastIntern(IToastViewModel toast) { if (toast == null) { return; } if (!_toastStream.HasObservers) { // // Debug.WriteLine("No ToastHost Listen to toast queue"); } else { _toastStream.OnNext(toast); } }
private void Dispatching(object?sender, EventArgs e) { if (_queue.Count <= 0) { if (_current != null && _current.LastAccessBy + _current.Offset < DateTime.Now) { Toast = null; } return; } if (_current is null) { lock (_sync) { _current = _queue.Dequeue(); _current.LastAccessBy = DateTime.Now; Toast = new Toast { DataContext = _current };; } } if (_current == null || _current.LastAccessBy + _current.Offset >= DateTime.Now) { return; } // // 当当前内容已经失效的时候 _current = _queue.Dequeue(); _current.LastAccessBy = DateTime.Now; Toast = new Toast { DataContext = _current };; }