Witam!
Mam mały problem, a mianowicie mam za zadanie zrobić ekran startowy, do którego co jakiś czas będzie wysyłana informacja z głównej aplikacji co aktualnie się ładuje i ma się to pojawić na tymże ekranie, jednak mam problem z działaniem na wątkach, uproszczony, podglądowy kod:
class Background{
BitmapImage Image
int height;
int Width;
}
class Font{
//fields
}
class Element{
Font font;
Point position;
string diplayText;
}
class Data{ //ViewModel
public ObservableCollection<Element> Elements {get;set;}
public Background BackgroundImg {get;set;}
public Element Message {get;set;}
AddElement(Element e){
Elements.Add(e);
}
}
class Creator{
Instance; //Singleton
XDocument document1;
XDocument document2;
void LoadDocuments();
void SetElements();
void SetMessage(string message);
Element CreateElement();
void Show(){
Thread thread = new Thread(ShowWindow);
thread.ApartmentState = ApartmentState.STA;
thread.Start();
}
}
Kilka słów wyjaśnienia: Na ekranie jest kilka innych elementów, które są ustaawiane raz na samym początku (ObservableList) i jeden element z wiadomością do wyświetlania. Mój problem polega na tym, że aplikacja wysypuje się, wtedy, gdy chcę dodać Elementy do tablicy z innej metody niż Show(); i dodać/zmienić wiadomość. Wiem czemu tak się dzieje, ale nie mam pojęcia jak mogę temu zapobiec. Próbowałem działać z dispatcherem, ale niestety nic nie działa. Zależy mi na tym, żeby wywołanie SetMessage() działało z dowolnego miejsca, ale nie mam pojęcia jak to osiągnąć.