Работа с потоками в WPF

261
20 августа 2017, 03:27

Интересует следующий вопрос: на окне присутствует textblock, информация в котором должна обновляться, к примеру, каждую секунду, для обновления я использую OnPropertyChanged. Операция обновления запускается по кнопке, сам метод обновления привязан с помощью интерфейса ICommand. Понятно, что такие операции должны выполняться в фоновом потоке, пытался сделать через BackgroundWorker, но немного не понял как именно нужно работать с ним, если я использую ICommand. Спасибо.

Answer 1
Task.Factory.StartNew(async () =>
        {
            //background work
            await Application.Current.Dispatcher.InvokeAsync(() =>
            {
                //
                yourProperty=newvalue;//То что связано с GUI (OnPropertyChanged)
            });
 });
Answer 2

Альтернативный вариант:

async Task DoSomething() // или async void, если это обработчик события
{
    var newValue = await Task.Run(() =>
        {
            // этот код выполняется в фоне
            return result;
        });
    TextBox.Text = newValue;
    // или лучше
    Property = newValue;
}

Я пользуюсь тем, что await, который происходит в UI-потоке, возвращается назад в UI-поток.

READ ALSO
Передача значения из метода в метод

Передача значения из метода в метод

Добрый день! Есть метод заполняющий treeview дискамиЕсть метод заполняющий listview файлами и папками

267
C# печать файлов xlsx без установленного MS Office

C# печать файлов xlsx без установленного MS Office

Есть шаблоны в xlsx файле, из которых я программно генерирую отчетыЭти отчеты необходимо отправить на печать, но на машине не установлен MS Office

320
Передвижение игрока

Передвижение игрока

Пишу 2d top down шутер на Unity 20171 C#

242
C# Awesomium выполнение скриптов

C# Awesomium выполнение скриптов

Есть сайт, на нем svg графикНадо сделать скриншот этой страницы

349