Задача в новом потоке по таймеру

228
01 августа 2017, 14:33

Есть метод который работает в отдельном от GUI потоке - обновляет коллекцию сообщений, которые получает из БД. Метод запускается по таймеру каждые несколько секунд. Что бы GUI не станился пока идет запрос решил вывести метод с помощью Async Await.

Таймер :

        System.Windows.Threading.DispatcherTimer ChatTimer { get; set; }
        ChatTimer.Tick += new EventHandler(ResetAsync);

Метод который обновляет историю сообщений :

     private async void ResetAsync(object sender, EventArgs e)
    {
        SetUpd();
    }
    private Task SetUpd()
    {
        return new Task(()=> 
        {
            messangersCollection.Clear();
            DataTable messangers = userDAL.ReturnChat(ClientID, null);
            for (int i = 0; i < messangers.Rows.Count; i++)
            {
                messangersCollection.Add(new Messangers()
                {
                    data = messangers.Rows[i][1].ToString().Remove(16),
                    text = messangers.Rows[i][0].ToString(),
                });
            }
        }); 
    }

Компилятор не ругается но сообщает что метод будет выполнен синхронно, как вывести его в отдельный поток ?

Answer 1
await SetUpd();

Почему именно по таймеру? Жёсткая привязанность ко времени ? Можно ведь

await Task.Run(async () => 
{ 
    while(true)
    {
       // цикл, выполняющий обновление // 
       await Task.Delay(ms); 
    }
}); 
Answer 2

Надо или крестик снять, или трусы надеть. Колбэк вашего таймера уже выполняется в отдельном от UI потоке. Использовать дополнительно Task.Run не нужно.

Отдельное замечание: создани таска != запуск кода в таске. Если у вас .NET 4.0, пользуйтесь Task.Factory.StartNew().

READ ALSO
C# проверка на null поля в в LINQ запросе

C# проверка на null поля в в LINQ запросе

Имеется следующий код:

340
Почему скрипт не у всех картинок выводит title?

Почему скрипт не у всех картинок выводит title?

Если на странице несколько изображений, которые соответствуют всем условиям в скрипте, то title выводится у всех картинокЕсли же на странице...

294
Подскажите что значит &amp;=

Подскажите что значит &=

Есть вот такая строка кода

307
Как обновить страницу в jquery ajax запросе?

Как обновить страницу в jquery ajax запросе?

Есть одна кнопка или форма на которой висит обработчик и при нажатии происходит ajax запросПри успешном выполнении я могу в success только поместить...

352