Example #1
0
        /// <summary>
        /// Выполняет делегат ReadDelegate
        /// </summary>
        /// <param name="o">
        /// массив object[2]; o[0] - выполняемый делегат, o[1] - массив object[3], содержащий параметры делегата
        /// </param>
        private void ExecReadDelegate(object o)
        {
            ProceedingCompleetedDelegate rd = (ProceedingProgressChangedDelegate)((object[])o)[0];

            object[] prm = (ProceedingProgressChangedDelegate)((object[])o)[1];
            rd((string)prm[0], (byte[])prm[1]);
        }
Example #2
0
 /// <summary>
 /// Выполняет делегат ProceedingCompleetedDelegate
 /// </summary>
 /// <param name="Params">
 /// массив object[4]; o[0] - выполняемый делегат, o[1] - Sender, o[2] - Data, o[3] - Error
 /// </param>
 private void ExecProceedingCompleetedDelegate(object Params)
 {
     object[] prm = (object[])Params;
     try
     {
         ProceedingCompleetedDelegate pcd = (ProceedingCompleetedDelegate)prm[0];
         pcd(prm[1], (byte[])prm[2], (bool)prm[3]);
     }
     catch
     {
         //Я не знаю почему здесь вылетает исключение "доступ к ликвидированному объекту не возможен"
     }
 }
Example #3
0
        private Guid AddElement
        (
            string Marker,
            DebuggerPrimitive.ActionType Queuetype,
            MemoryType Memorytype,
            int Address,
            byte[] Recording_Buffe,
            int Count,
            bool CycleElement,
            int Period,
            ProceedingCompleetedDelegate Callback,
            ProceedingProgressChangedDelegate PartCallback)
        {
            Guid m_ret = Guid.NewGuid();

            Trace.WriteLine("Добавление запроса в очередь :" + m_ret.ToString(), "DebuggerEngine");

            DebuggerPrimitive.QueueElement m_newQuery = new DebuggerPrimitive.QueueElement();

            if (Count > BufferSize)
            {
                //Добавляем часть для чтения частями
                m_newQuery.isReadLongBuffer = true;
                m_newQuery.ReadLongBuffer   = new DebuggerPrimitive.ReadLongData(Count);
                m_newQuery.iAddress         = Address;
                m_newQuery.PartCallBack     = PartCallback;
            }
            else
            {
                m_newQuery.isReadLongBuffer = false;
                m_newQuery.ReadLongBuffer   = null;
            }

            m_newQuery.Marker           = Marker;
            m_newQuery.Period           = Period;
            m_newQuery.ID               = m_ret;
            m_newQuery.Address          = Address;
            m_newQuery.Callback         = Callback;
            m_newQuery.Count            = Count;
            m_newQuery.CycleElement     = CycleElement;
            m_newQuery.Memorytype       = Memorytype;
            m_newQuery.Queuetype        = Queuetype;
            m_newQuery.Recording_Buffer = Recording_Buffe;

            //Блокируем список и добавляем элемент
            lock (_AddElementInQueue)
            {
                _AddElementInQueue.Add(m_newQuery);
            }
            return(m_ret);
        }
Example #4
0
        /// <summary>
        /// Добавление элемента в очередь
        /// </summary>
        /// <param name="Queuetype">Тип запроса (чтение/запись)</param>
        /// <param name="Memorytype">Тип памяти</param>
        /// <param name="Address">Начальный адрес</param>
        /// <param name="Count">Количество байт для чтения</param>
        /// <param name="Period">Период опроса</param>
        /// <param name="CycleElement">Флаг цикличности</param>
        /// <param name="Recording_Buffe">Записываемых буфер</param>
        /// <param name="Callback">Функция обратного вызова</param>
        /// <returns>Уникальный номер в очереди</returns>
        public Guid AddElementInQueue
        (
            DebuggerPrimitive.ActionType Queuetype,
            MemoryType Memorytype,
            int Address,
            byte[] Recording_Buffe,
            int Count,
            bool CycleElement,
            int Period,
            ProceedingCompleetedDelegate Callback
        )
        {
            Guid m_ret = AddElement(null, Queuetype, Memorytype, Address, Recording_Buffe, Count, CycleElement, Period, Callback, null);

            return(m_ret);
        }
Example #5
0
 /// <summary>
 /// Добавляет в очередь опороса отладчика объект записи данных
 /// </summary>
 /// <param name="Address">Адрес области памяти, к которой производится обращение</param>
 /// <param name="MemoryType">Тип области памяти, которой производится обращение</param>
 /// <param name="Count">Число байт, которое надо считать</param>
 /// <param name="Sender">Опрашиваемый объект</param>
 /// <param name="ProgressChangedCallback">Callback для получения информации о процессе опроса</param>
 /// <param name="CompleetingCallback">Callback для порлучения информации о завершении опроса</param>
 public void AddWriteItem(int Address, MemoryType MemoryType, byte[] Buffer, object Sender,
                          ProceedingProgressChangedDelegate ProgressChangedCallback, ProceedingCompleetedDelegate CompleetingCallback)
 {
     lock (this.writeItems)
     {
         this.writeItems.Add(new RequestItem()
         {
             Address    = Address,
             MemoryType = MemoryType,
             Data       = Buffer,
             Sender     = Sender,
             ProgressChangedCallback     = ProgressChangedCallback,
             ProceedingCompletedCallback = CompleetingCallback
         });
     }
 }
Example #6
0
        /// <summary>
        /// Добавляет в очередь опороса отладчика элемент чтения данных данных
        /// </summary>
        /// <param name="Address">Адрес области памяти, к которой производится обращение</param>
        /// <param name="MemoryType">Тип области памяти, которой производится обращение</param>
        /// <param name="Buffer">Записываемые даные</param>
        /// <param name="Sender">Опрашиваемый объект</param>
        /// <param name="ProgressChangedCallback">Callback для получения информации о процессе опроса</param>
        /// <param name="CompleetingCallback">Callback для порлучения информации о завершении опроса</param>
        public void AddReadItem(int Address, MemoryType MemoryType, int Count, object Sender,
                                ProceedingProgressChangedDelegate ProgressChangedCallback, ProceedingCompleetedDelegate CompleetingCallback)
        {
            RequestItem item = new RequestItem()
            {
                Address                     = Address,
                Data                        = new byte[Count],
                MemoryType                  = MemoryType,
                RequestType                 = RequestType.Read,
                Sender                      = Sender,
                ProgressChangedCallback     = ProgressChangedCallback,
                ProceedingCompletedCallback = CompleetingCallback
            };

            this.lockingMemoryType = MemoryType;
            this.lockingAddress    = Address;
            this.lockingLength     = Count;
            this.lockingActive     = true;
            this.AddReadItem(item);
            this.lockingActive = false;
        }