File: MS\Internal\Automation\ClientSideQueueItem.cs
Project: wpf\src\UIAutomation\UIAutomationClient\UIAutomationClient.csproj (UIAutomationClient)
//---------------------------------------------------------------------------
//
// <copyright file="ClientSideQueueItem.cs" company="Microsoft">
//    Copyright (C) Microsoft Corporation.  All rights reserved.
// </copyright>
// 
//
// Description: Class to create a queue on its own thread.
//
// History:  
//  06/17/2003 : BrendanM Ported to WCP
//
//---------------------------------------------------------------------------
 
using System.Windows.Automation;
using System.Windows.Automation.Provider;
using System;
using System.Collections;
using System.ComponentModel;
using MS.Internal.Automation;
using MS.Win32;
 
namespace MS.Internal.Automation
{
    // Worker class used to queue events that originated on the client side (e.g.
    // used by focus and top-level window tracking to queue WinEvent information).
    internal class ClientSideQueueItem : QueueItem
    {
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------
 
        #region Constructors
 
        internal ClientSideQueueItem(Delegate clientCallback, AutomationElement srcEl, UiaCoreApi.UiaCacheRequest request, AutomationEventArgs e)
        {
            _clientCallback = clientCallback;
            _srcEl = srcEl;
            _request = request;
            _e = e;
        } 
 
        #endregion Constructors
 
 
        //------------------------------------------------------
        //
        //  Internal Methods
        //
        //------------------------------------------------------
 
        #region Internal Methods
 
        internal override void Process()
        {
            // Grab properties for cache request here...
            AutomationElement src;
            if (_srcEl == null)
            {
                src = null;
            }
            else
            {
                UiaCoreApi.UiaCacheResponse response = UiaCoreApi.UiaGetUpdatedCache(_srcEl.RawNode, _request, UiaCoreApi.NormalizeState.View, null);
                src = CacheHelper.BuildAutomationElementsFromResponse(_request, response);
            }
 
            // 
 
            if (!(src == null && _e.EventId == AutomationElement.AutomationFocusChangedEvent))
                InvokeHandlers.InvokeClientHandler(_clientCallback, src, _e);
        }
 
        #endregion Internal Methods
 
 
        //------------------------------------------------------
        //
        //  Private Fields
        //
        //------------------------------------------------------
 
        #region Private Fields
 
        private Delegate _clientCallback;       // a client callback delegate
        private AutomationElement _srcEl;     // the source element
        private UiaCoreApi.UiaCacheRequest _request; // shopping list for prefetch
        private AutomationEventArgs _e;       // the event args for the callback
 
        #endregion Private Fields
    }
}