Есть 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-потоке.
}
);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Возник вопрос по поводу изучения чистого JS и фреймворковНе раз являлся свидетелем: на форумах более-менее опытные разработчики пытаются...
Изучаю сейчас vuejsВ уроках для разворачивания простого приложения со структурой, представленной ниже, понадобилось поставить node
Есть задача вытащить фотографии из инстаграм с помощью JS, необходимы фотографии по конкретному тэгу