Есть DataGrid, в него заношу новый объект. Если я в основном потоке получаю ссылку на первый Item у DataGrid, привожу его к типу и изменяю свойства, то и значения в таблице тоже меняются. Но если же я создаю новый поток и в нем проделываю тоже самое, ничего не получается. Даже если я проделываю это через BeginInvoke
RobotsInfo ri = (RobotsInfo)dataGrid.Items[0];
ri.Name = "AAA";
Данный код в основном потоке изменяет значение в таблице на AAA, а если сделать тоже самое в другом потоке, то ничего не получается. Как можно решить это?
Попросите Dispatcher выполнить эти действия в "правильном" потоке:
dataGrid.Dispatcher.Invoke(() =>
{
RobotsInfo ri = (RobotsInfo)dataGrid.Items[0];
ri.Name = "AAA";
});
В .NET Доступ к UI потоку ограничен в целях безопасности. Поэтому нужно использовать диспетчер.
Ниже приведён пример, как можно выполнить операции с UI в требуемом потоке.
// Создаём и запускаем поток.
private void Button_Click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(UpdateTextWrong);
thread.Start();
}
// Метод, который будет выполняться в потокею
private void UpdateTextWrong()
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(ThreadStart)delegate()
{
// Делаем что-то в UI-потоке.
}
);
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости