示例#1
0
        public void FlushPendingInvalidations(IUIFramework framework)
        {
            Debug.Assert(!_flushing, "Flushing while already flushing!?!");
            _flushing = true;

            try
            {
                Debug.Assert(pendingInvalidations.Count < _keys.Length, "Need to increase the size of MAX_PENDING_INVALIDATIONS.");
                pendingInvalidations.Keys.CopyTo(_keys, 0);

                for (int i = 0; i < pendingInvalidations.Count; i++)
                {
                    PropertyKey key = _keys[i];
                    if (pendingInvalidations[key] == InvalidationState.Pending)
                    {
                        int result = framework.InvalidateUICommand((uint)CommandId,
                                                      PropertyKeyExtensions.GetCommandInvalidationFlags(key),
                                                      key.ToPointer());
                        pendingInvalidations[key] = result == 0 ? InvalidationState.WaitingForUpdateProperty : InvalidationState.Error;
                    }
                }
            }
            catch (Exception)
            {
                pendingInvalidations.Clear();
                throw;
            }
            finally
            {
                _flushing = false;
            }
        }