Есть метод который работает в отдельном от 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(),
});
}
});
}
Компилятор не ругается но сообщает что метод будет выполнен синхронно, как вывести его в отдельный поток ?
await SetUpd();
Почему именно по таймеру? Жёсткая привязанность ко времени ? Можно ведь
await Task.Run(async () =>
{
while(true)
{
// цикл, выполняющий обновление //
await Task.Delay(ms);
}
});
Надо или крестик снять, или трусы надеть. Колбэк вашего таймера уже выполняется в отдельном от UI потоке. Использовать дополнительно Task.Run
не нужно.
Отдельное замечание: создани таска != запуск кода в таске. Если у вас .NET 4.0, пользуйтесь Task.Factory.StartNew()
.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Если на странице несколько изображений, которые соответствуют всем условиям в скрипте, то title выводится у всех картинокЕсли же на странице...
Есть одна кнопка или форма на которой висит обработчик и при нажатии происходит ajax запросПри успешном выполнении я могу в success только поместить...