Ejemplo n.º 1
0
        private void PageTracing(PagingAction action)
        {
            _stopTracePage = true;
            StopFind();

            lock (btnNext)
            {
                btnNext.Enabled     = false;
                btnLast.Enabled     = false;
                btnPrevious.Enabled = false;
                btnTop.Enabled      = false;

                if (_tracingPageResult != null && _tracingPageDelegate != null)
                {
                    _tracingPageDelegate.EndInvoke(_tracingPageResult);
                }

                _stopTracePage     = false;
                _tracingPageResult = _tracingPageDelegate.BeginInvoke(action,
                                                                      new AsyncCallback(new Action <IAsyncResult>(
                                                                                            a =>
                {
                    BeginInvoke(new Action(() =>
                    {
                        btnNext.Enabled = true;
                        btnLast.Enabled = true;

                        if (_currentPageTopOffset > 0 &&
                            MemoryMappedLog.TraceReader.NextReadOffset > 0)
                        {
                            btnPrevious.Enabled = true;
                            btnTop.Enabled      = true;
                        }
                    }));
                })), null);
            }
        }
Ejemplo n.º 2
0
        private void TracingPageThread(PagingAction action)
        {
            int lastOffset = 0;

            if (action == PagingAction.Previous)
            {
                _currentPageBottomOffset = _currentPageTopOffset;
                lastOffset = _currentPageTopOffset;
            }
            else
            {
                _currentPageTopOffset = _currentPageBottomOffset;

                lastOffset = _currentPageBottomOffset;
            }

            rtbTrace.Invoke(new Action(() => rtbTrace.Text = ""));

            int numMessagesOutstanding = _pageSize;// + (action == PagingAction.Previous ? 1 : 0);

            while (!_stopTracePage && numMessagesOutstanding > 0)
            {
                List <string> messages;

                if (action == PagingAction.Next)
                {
                    messages = MemoryMappedLog.TraceReader.ReadNextMessages(
                        numMessagesOutstanding, lastOffset);

                    lastOffset = MemoryMappedLog.TraceReader.NextReadOffset;

                    // For next, we wait until N number of messages have been received.
                    numMessagesOutstanding -= messages.Count;
                }
                else
                {
                    messages = MemoryMappedLog.TraceReader.ReadPreviousMessages(
                        numMessagesOutstanding, lastOffset);

                    numMessagesOutstanding -= messages.Count;

                    if (numMessagesOutstanding > 0)
                    {
                        messages.AddRange(MemoryMappedLog.TraceReader.ReadNextMessages(numMessagesOutstanding, lastOffset));

                        _currentPageBottomOffset = MemoryMappedLog.TraceReader.NextReadOffset;
                    }

                    // For previous, we only try to get N number of previous messages once
                    numMessagesOutstanding = 0;
                }

                IAsyncResult appendResult = rtbTrace.BeginInvoke(new Action(() =>
                {
                    foreach (string message in messages)
                    {
                        if (_stopTracePage)
                        {
                            break;
                        }

                        AddTraceMessage(message);
                    }
                }));

                Thread.Sleep(1);
            }

            if (action == PagingAction.Previous)
            {
                _currentPageTopOffset = MemoryMappedLog.TraceReader.NextReadOffset;
            }
            else
            {
                _currentPageBottomOffset = MemoryMappedLog.TraceReader.NextReadOffset;
            }
        }