Ejemplo n.º 1
0
        private async Task MessageProcessingTask()
        {
            try
            {
                ChannelReader <LoggerJsonMessage> MessageReader = _MessageManager.Messages.Reader;

                while (await MessageReader.WaitToReadAsync(_CloseCancellationToken.Token).ConfigureAwait(false))
                {
                    while (MessageReader.TryRead(out LoggerJsonMessage Message))
                    {
                        if (_CloseCancellationToken.IsCancellationRequested)
                        {
                            return;
                        }

                        string TabTitle = Message.GroupName ?? _LoggerGroupCache.ResolveGroupNameForCategoryName(Message.CategoryName);

                        if (!_Tabs.TryGetValue(TabTitle, out DebugWindowTabPage Tab))
                        {
                            lock (_Tabs)
                            {
                                if (!_Tabs.TryGetValue(TabTitle, out Tab))
                                {
                                    Tab = new DebugWindowTabPage(this, TabTitle);
                                    _Tabs.Add(TabTitle, Tab);

                                    Invoke(new MethodInvoker(() =>
                                    {
                                        ToolStripMenuItem TabWindowMenuItem = new ToolStripMenuItem(Tab.Text)
                                        {
                                            Checked      = true,
                                            CheckOnClick = true,
                                            Tag          = Tab
                                        };
                                        TabWindowMenuItem.CheckedChanged += OnTabWindowMenuItemCheckedChanged;
                                        WindowMenu.DropDownItems.Add(TabWindowMenuItem);

                                        TabContainer.TabPages.Add(Tab);
                                        _ConfigureTabAction?.Invoke(Tab);
                                    }));
                                }
                            }
                        }

                        Tab.AddMessage(SerializeMessageToJson(Message));
                    }
                }
            }
            catch (OperationCanceledException)
            {
            }
        }