public static IObservable <T> GetItem <S, T>(this UtilityInterface.IService <KeyValuePair <DynamicData.ChangeReason, S> > service, string key) where S : IWorkerItem <T>
        {
            //(Tasks as ISubject<T>).OnNext(kvp);

            return(service.Resource
                   .Where(_ => _.Key == DynamicData.ChangeReason.Remove)
                   .FirstAsync(i => i.Value.Key == key)
                   .Select(i => i.Value.Output));
        }
        public static async Task <T> GetItem <T>(this UtilityInterface.IService <KeyValuePair <DynamicData.ChangeReason, IWorkerItem <T> > > service, string key)
        {
            //(Tasks as ISubject<T>).OnNext(kvp);

            return(await service.Resource
                   .Where(_ => _.Key == DynamicData.ChangeReason.Remove)
                   .FirstAsync(i => i.Value.Key == key)
                   .Select(i => i.Value.Output)
                   .ToTask());
        }
Ejemplo n.º 3
0
        public AsyncWorkerQueueControl(UtilityInterface.IService <KeyValuePair <DynamicData.ChangeReason, R> > workerqueue = null)
        {
            //Uri resourceLocater = new Uri("/ReactiveAsyncWorkerWpf;component/Themes/QueueWorkerControl.xaml", System.UriKind.Relative);
            //ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater);
            //Style = resourceDictionary["BackgroundWorkerQueueControlStyle"] as Style;

            var sets = Observable.FromEventPattern <RoutedEventHandler, EventArgs>(_ => this.Loaded += _, _ => this.Loaded -= _)
                       //.StartWith(workerqueue).Where(_ => _ != null)
                       .Take(1)
                       //.Select(_ => )
                       .Subscribe(_x =>
            {
                var _       = workerqueue ?? NewItemsInitialise(NewItemSubject);
                ItemsSource = new ObservableCollection <object>();
                ItemsSink   = new ObservableCollection <object>();
                var dis     = _.Resource.Subscribe(asv =>
                {
                    switch (asv.Key)
                    {
                    case (DynamicData.ChangeReason.Add):
                        this.Dispatcher.InvokeAsync(() =>
                        {
                            ItemsSource.Add(asv.Value);
                            Count = ItemsSource.Count;
                        }, System.Windows.Threading.DispatcherPriority.Background, default(System.Threading.CancellationToken));
                        break;

                    case (DynamicData.ChangeReason.Remove):
                        this.Dispatcher.InvokeAsync(() =>
                        {
                            ItemsSource.Remove(asv.Value);
                            ItemsSink.Add(asv.Value);
                            Count = ItemsSource.Count;
                        }, System.Windows.Threading.DispatcherPriority.Background, default(System.Threading.CancellationToken));

                        break;
                    }
                });


                /* this.Dispatcher.InvokeAsync(() => { ItemsSource = additions; }, System.Windows.Threading.DispatcherPriority.Background, default(System.Threading.CancellationToken));*/
            });
        }