Nie mogę dodać elementu do listy z innego wątku

0

W ViewModelu utworzyłem Listę
public IList<ConsoleCommand> MessageList { get; private set; } = new ObservableCollection<ConsoleCommand>();
IConsole jest to element obsługujący tą listę i znajduje się w Modelu kontrolki.

public partial class MyConsole : UserControl, IConsole
    {
        public MyConsole()
        {
            InitializeComponent();
            ViewModel = hViewModel;
        }
        MyConsoleViewModel ViewModel ;

        public bool Add(ConsoleCommand Source, IConsoleMessage[] Messages)
        {
            if (Source == null)
                return false;

            bool ret = false;
            Dispatcher?.Invoke(() =>
            {
                ConsoleCommand cmd = ViewModel.MessageList.FirstOrDefault(x => x.ID == Source.ID);
                if (cmd != null)
                {
                    ret = true;
                    foreach(IConsoleMessage m in Messages)
                    {
                        IConsoleMessage newMessage = m.Copy();
                        cmd.Add(newMessage );
                    }
                }
            });
            return ret;
        }

Problem leży w tym, że nie mogę zmieniać zawartości obiektów po dodaniu ich do listy z poziomu wywołanego eventu z metody asynchronicznej.
Obiekt ConsoleCommand wygląda tak: https://pastebin.com/2tnQpMys
Obiekt ConsoleMessage wygląda tak: https://pastebin.com/Cf0d4MTG

Otrzymuję następujący wyjątek:
screenshot-20190218213432.png

Cała zasada działania wygląda mniej więcej tak:

  1. W MainWindow tworzę nowy obiekt ConsoleCommand i przekazuję go do metody asynchronicznej.
  2. Metoda asynchroniczna tworzy swoją własną listę ConsoleMessage oraz tworzy tam kilka obiektów
  3. Metoda asynchroniczna wywołuje Event i w argumentach przekazuje ConsoleCommand oraz ConsoleMessage[]
  4. Event odbiera MainWindow i używając Dispatcher.Invoke() wywołuje metodę MyConsole.Add() z tymi dwoma parametrami.
  5. Otrzymuję wyjątek w momencie
    screenshot-20190218214235.png

Proszę o wskazanie mi prawidłowego toku myślenia jak szukać rozwiązania

0

Problem rozwiązałem kopiując tablicę wiadomości przychodzących w evencie z wątku asynchronicznego do nowo utworzonej tablicy we właściwym wątku. Ale sprawdzę linki które napisałeś i zmodyfikuję kod :0 Dziękuję Ci za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1