Я хочу обновить пользовательский интерфейс из другого потока
У меня есть много вариантов для выполнения кода в контексте UI темы:
правильный способ выполнения кода в контексте контекста пользовательского интерфейса?
1: с помощью BeginInvoke/EndInvoke методы:
позер-код
public delegate int AddItem(object Item);
public Form1 F = (Form1)Application.OpenForms["Form1"];
private static async DoSomething()
{
AddItem ad = new AddItem(F.ls1.Items.Add);
await Task.Run(() =>F.EndInvoke(F.BeginInvoke(add,"NewItem")));
}
2: использованием Прогресс/IProgress: Я не знаю, как реализовать такую вещь
есть ли другие способы сделать это? и что является предпочтительным способом?
примечание: поток, который вызывает задачу не то же UI Thread поэтому, возможно, прогресс не работает здесь
Я не думаю, что это дублирующий вопрос, на который вы ссылаетесь, для WPF –
Правда, но не меняет подход. Просто используйте «normal' Invoke' »вместо' Dispatcher.Invoke'. Если у вас возникли проблемы с использованием/внедрением, я с удовольствием помогу в специфике ... – ChrFin
Вы не должны быть потоковыми, вы не можете многопоточно использовать интерфейс. Вы используете Invoke совершенно неправильно. Правильное использование 'BeginXXX' и' EndXXX' - 'Task.FromAsync (F.BeginInvoke (add,« NewItem »), F.EndInvoke)'. – Aron