Вы хотите использовать Invoke или BeginInvoke для минимальной части работы, необходимой для изменения пользовательского интерфейса. Ваш «тяжелый» метод должен выполняться в другом потоке (например, через BackgroundWorker), но затем с помощью Control.Invoke / Control.BeginInvoke только для обновления пользовательского интерфейса. Таким образом, ваш поток пользовательского интерфейса будет свободно обрабатывать события пользовательского интерфейса и т. Д.
См. Мою статью для потоковой передачи для примера WinForms - хотя статья была написана ранее BackgroundWorker прибыл на место происшествия, и, боюсь, я не обновил его в этом отношении. BackgroundWorker немного упрощает обратный вызов.
Соответствует ли это вашему требованию? Это ничего не делает, кроме печати значения.
import tensorflow as tf
from tensorflow.python.framework import tensor_shape
some_data = [11,222,33,4,5,6,7,8]
def func( v ):
print (some_data[v])
return some_data[v]
with tf.Session() as sess:
r = tf.while_loop(
lambda i, v: i < 4,
lambda i, v: [i + 1, tf.py_func(func, [i], [tf.int32])[0]],
[tf.constant(0), tf.constant(2, tf.int32)],
[tensor_shape.unknown_shape(), tensor_shape.unknown_shape()])
r[1].eval()
Он печатает
11 4 222 33
blockquote>Порядок меняется каждый раз, но я думаю, что
tf.control_dependencies
может быть полезно для управления этим .