Изменяя значение DataGrid в другом потоке

176
25 января 2018, 16:24

Есть DataGrid, в него заношу новый объект. Если я в основном потоке получаю ссылку на первый Item у DataGrid, привожу его к типу и изменяю свойства, то и значения в таблице тоже меняются. Но если же я создаю новый поток и в нем проделываю тоже самое, ничего не получается. Даже если я проделываю это через BeginInvoke

RobotsInfo ri = (RobotsInfo)dataGrid.Items[0];
ri.Name = "AAA";

Данный код в основном потоке изменяет значение в таблице на AAA, а если сделать тоже самое в другом потоке, то ничего не получается. Как можно решить это?

Answer 1

Попросите Dispatcher выполнить эти действия в "правильном" потоке:

dataGrid.Dispatcher.Invoke(() =>
    {
        RobotsInfo ri = (RobotsInfo)dataGrid.Items[0];
        ri.Name = "AAA";
    });
Answer 2

В .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-потоке.
        }
        );
}
READ ALSO
JavaScript без быдлокодинга [требует правки]

JavaScript без быдлокодинга [требует правки]

Возник вопрос по поводу изучения чистого JS и фреймворковНе раз являлся свидетелем: на форумах более-менее опытные разработчики пытаются...

312
vuejs - работа с компонентами без npm

vuejs - работа с компонентами без npm

Изучаю сейчас vuejsВ уроках для разворачивания простого приложения со структурой, представленной ниже, понадобилось поставить node

275
Как работать с API Instagram c помощью FETCH?

Как работать с API Instagram c помощью FETCH?

Есть задача вытащить фотографии из инстаграм с помощью JS, необходимы фотографии по конкретному тэгу

241