Я понимаю, что обновление пользовательского интерфейса из другого потока требует вызова, но это вызов также требуется при простом чтении данных из пользовательского интерфейса?Требуется ли чтение данных из потока пользовательского интерфейса?
Например, если выполняется вычисление на основе данных, найденных в большой сетке, нужно ли вызывать сетку при чтении значений, найденных в сетке, и присвоении их переменным, используемым при вычислении?
Если нет, то почему бы и нет?
Есть ли проблемы с производительностью? Лучше ли кэшировать все данные в массив (или datatable), а затем запускать вычисления или вызывать сетку каждый раз, когда данные считываются (например, в каждой строке)?
Я специально спрашиваю о VB.NET, хотя я сомневаюсь, что на любом другом языке .NET есть большая разница.
Вы не должны задавать этот вопрос. Какую ценность вы ожидаете получить, когда ваш поток прочитает свойство в совершенно случайный момент времени? Может быть что угодно, когда вы разрешаете пользователю продолжать редактирование содержимого сетки. Может быть введено половину введенного значения. Вы воскликнете: «Я отключу сетку!» Да, что это хорошая идея. Но тогда вам больше не нужно решать эту проблему, так как вы можете просто прочитать нужные вам значения * до того, как вы начнете поток. –
Вы правы, я могу прочитать сетку перед ее запуском, поэтому я спросил о производительности между этими двумя методами, если invoke не требуется. Однако зачем читать значения в другой таблице в памяти, если таблица в пользовательском интерфейсе уже содержит значения? Это тяжело и требует много времени для больших столов. – DrCocoa
Пользовательский интерфейс не является «таблицей». Разделение данных с точки зрения является универсальным программным подходом со многими преимуществами. –