Как уже упоминалось другими, если вы выполняете какую-либо работу с потоком, отличным от пользовательского интерфейса, вы должны отправить потоку пользовательского интерфейса, чтобы фактически обновить любой элемент, связанный с элементом пользовательского интерфейса.
В вашем примере это было бы довольно просто. Просто передайте Dispatcher
( msdn ) вашего окна вашему Monitor
и используйте его для соответствующей отправки:
...
Monitor md = new Monitor(this.Dispatcher);
...
public Monitor(Dispatcher dispatcher)
{
_dispatcher = dispatcher;
}
...
public longwork() {
_dispatcher.BeginInvoke((Action)(()=>listOfPeople.Add(new People()));
Thread.Sleep(10000);
}
Вы можете позвонить Dispatcher.Invoke
вместо Dispatcher.BeginInvoke
, но если вас не интересует исход и вы хотите быстро двигаться дальше, BeginInvoke
ваш друг.