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(); } } } } }