Esempio n. 1
0
        private void AddExtraColumnsIfNeeded(DataTable table, AnalogyLogMessage message)
        {
            if (message.AdditionalInformation != null && message.AdditionalInformation.Any() && Settings.CheckAdditionalInformation)
            {
                foreach (KeyValuePair <string, string> info in message.AdditionalInformation)
                {
                    if (!currentTable.Columns.Contains(info.Key))
                    {
                        if (!owner.InvokeRequired)
                        {
                            columnsLockSlim.EnterWriteLock();
                            if (!currentTable.Columns.Contains(info.Key))
                            {
                                table.Columns.Add(info.Key);
                            }

                            columnsLockSlim.ExitWriteLock();
                        }
                        else
                        {
                            owner.BeginInvoke(new MethodInvoker(() =>
                            {
                                columnsLockSlim.EnterWriteLock();
                                if (!currentTable.Columns.Contains(info.Key))
                                {
                                    table.Columns.Add(info.Key);
                                    columnAdderSync.Set();
                                }
                                columnsLockSlim.ExitWriteLock();
                            }));
                            columnAdderSync.WaitOne();
                            columnAdderSync.Reset();
                        }
                    }
                }
            }
        }