Заполнение списка в отдельном потоке

После того как я получаю список с сервера, у меня этот список может быть в количестве от 0 до 15 элементов - не больше. Я создаю поток, в котором добавляю элементы в локальную базу и в локальный список. Проблема заключается в том , что когда я прохожусь циклом foreach по элементам, которые пришли с сервера, программа выбивает ошибку, что я выхожу за пределы списка, но при этом база и локальный список заполняется, в Try Catch ничего не попадает. Метод в котором я запускаю поток

private void Start_Upload_Server(string ValueJobject)
        {
            try
            {
                // Загружаю сообщения с сервера 
                var TempList = JsonConvert.DeserializeObject<ObservableCollection<ChatModel>>(ValueJobject);
                Thread_UploadServer = new Thread(new ParameterizedThreadStart(GetLastMessage_onServer));
                Thread_UploadServer.Start(TempList);
            }
            catch(Exception ex)
            {
                var s = ex;
            }
            
           
        } // Start_Upload_Server

Метод в котором я обрабатываю данные

 private async void GetLastMessage_onServer(object obj)
        {
            // Список с сервреа тут 15 элементов 
            var TempList = (ObservableCollection<ChatModel>)obj;
            try
            {
                // Бегу по списку 
                foreach (var item in TempList)
                {
                  
                    // Уточняем явялется ли сообщение шифрованным
                    var flag_Line_Correct = GetLineCorrect(item.Message);
                    if (flag_Line_Correct)
                        item.Message = Decript(item.Message);

                    // устанавливаю нужные мне параметры 
                    SetStartParametr_Message(item);

                    // Добавляю в локальную бд
                    await ChatDbService.AddMessage(item);

                    // Добавляю в локальный список 
                    MessageList.Add(item);
                }
            }
            catch(Exception ex)
            {
                var exception = ex.Message;
            }
            finally
            {

                Thread_UploadServer.Abort();
                Thread_UploadServer.Join();

            }
        } // GetAllMessage

Даже если внутри foreach не будет кода, и программа в пустую пробежится по списку она серавно выйдет за пределы списка. Вот моя ошибка

System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index'

Ответы (0 шт):