public bool Combine(ViewModelBase vm) { if (IsCompleted) { return(false); } object oldMessage; bool oldBusy; lock (_ref) { if (IsCompleted) { return(false); } if (vm._busyTail != null) { _prev = vm._busyTail; vm._busyTail._next = this; } oldMessage = vm.BusyMessage; oldBusy = vm.IsBusy; vm._busyTail = this; } if (oldMessage != vm.BusyMessage) { vm.OnPropertyChanged(Empty.BusyMessageChangedArgs); } if (oldBusy != vm.IsBusy) { vm.OnPropertyChanged(Empty.IsBusyChangedArgs); } vm.OnPropertyChanged(Empty.BusyInfoChangedArgs); return(true); }
internal virtual void HandleInternal(object sender, object message) { var busyToken = message as IBusyToken; if (busyToken != null) { HandleMode messageMode = Settings.HandleBusyMessageMode; if (messageMode.HasFlagEx(HandleMode.Handle)) { var token = new BusyToken(this, busyToken); if (token.Combine(this)) { OnBeginBusy(token); } } if (messageMode.HasFlagEx(HandleMode.NotifySubscribers)) { PublishInternal(sender, message); } return; } if (Settings.BroadcastAllMessages || message is IBroadcastMessage) { PublishInternal(sender, message); } }
public virtual IBusyToken BeginBusy(object message = null) { var token = new BusyToken(this, message ?? Settings.DefaultBusyMessage); token.Combine(this); Publish(token); OnBeginBusy(token); return(token); }
private static bool TryGetMessage <TType>(BusyToken token, Func <TType, bool> filter, out TType result) { if (token.Message is TType) { result = (TType)token.Message; if (filter == null || filter(result)) { return(true); } } result = default(TType); return(false); }
/// <summary> Creates a busy context /// </summary> /// <param name="sender">The sender.</param> /// <returns>BusyToken</returns> /// <example><code>using (BusyManager.Instance.Context(this)) { ... } </code></example> public BusyToken Context(IObjectVM sender) { BusyToken token; _tokens.TryGetValue(sender, out token); if (token == null) { token = new BusyToken(sender); _tokens.Add(sender, token); token.Finished += (s, e) => _tokens.Remove(((BusyToken)s).Sender); token.Start(); } else { token.ContinuedAsync(); } return(token); }