Exemplo n.º 1
0
        public void Update()
        {
            lock (stateLock)
            {
                switch (State)
                {
                case UpdateFilterState.Idle:
                    State = UpdateFilterState.UpdateRequested;
                    break;

                case UpdateFilterState.UpdateInProgress:
                    State = UpdateFilterState.UpdateRequestQueued;
                    break;

                case UpdateFilterState.UpdateRequested:
                    break;

                case UpdateFilterState.UpdateRequestQueued:
                    break;

                case UpdateFilterState.Terminate:
                    break;
                }
            }
        }
Exemplo n.º 2
0
 public UpdateFilter(Action onUpdate, TimeSpan maxFreq)
 {
     this.OnUpdate             = onUpdate;
     dispatcher                = Dispatcher.CurrentDispatcher;
     UpdateThread              = new Thread(new ThreadStart(doUpdateThread));
     UpdateThread.Priority     = ThreadPriority.BelowNormal;
     UpdateThread.IsBackground = true;
     UpdateThread.Start();
     floodGate = new FloodGate(maxFreq);
     State     = UpdateFilterState.Idle;
 }
Exemplo n.º 3
0
        protected void doUpdateThread()
        {
            while (State != UpdateFilterState.Terminate)
            {
                Thread.Sleep(10);
                Thread.SpinWait(1);

                switch (State)
                {
                case UpdateFilterState.Idle:
                    break;

                case UpdateFilterState.UpdateInProgress:
                    break;

                case UpdateFilterState.UpdateRequestQueued:
                    break;

                case UpdateFilterState.UpdateRequested:
                    lock (stateLock)
                    {
                        State = UpdateFilterState.UpdateInProgress;
                    }
                    Task.Run(() => {
                        try
                        {
                            DispatcherOperation op = dispatcher.InvokeAsync(OnUpdate);
                            op.Wait();
                        }
                        finally
                        {
                            switch (State)
                            {
                            case UpdateFilterState.UpdateInProgress:
                                State = UpdateFilterState.Idle;
                                break;

                            case UpdateFilterState.UpdateRequestQueued:
                                State = UpdateFilterState.UpdateRequested;
                                break;
                            }
                        }
                    });
                    break;
                }
            }
        }
Exemplo n.º 4
0
 public void Dispose()
 {
     State = UpdateFilterState.Terminate;
 }