2012-10-19 5 views
1

Мне нужно постоянно опробовать хранилище данных для получения возможных обновлений. Я достигаю этого, используя следующий код. Кстати, это приложение для форм Windows.Выполнение задач с регулярными интервалами с использованием while (true)

var uiContext = TaskScheduler.FromCurrentSynchronizationContext(); 

var updateTask = Task.Factory.StartNew(() => 
{ 
    while (true) 
    { 
     Thread.Sleep(5000); 

     Task.Factory.StartNew(() => 
     { 
      someData = dataStore.GetData(); 
     }).ContinueWith(t => 
     { 
      someGrid.DataSource = someData; 
     }, uiContext); 
    } 
}); 

someData является полем частных класса и someGrid является контроль DataGrid.

Это, кажется, работает отлично, но мне было интересно, есть ли лучший способ его достижения. Кроме того, должна ли моя внешняя задача быть LongRunning?

EDIT:

Хорошо, по предложению Джона и Henk, я использую таймер вместо:

uiContext = TaskScheduler.FromCurrentSynchronizationContext(); 

updateTimer = new System.Timers.Timer(5000); 
updateTimer.Elapsed += updateTimer_Elapsed; 
updateTimer.Enabled = true; 

истекшее событие:

void updateTimer_Elapsed(object sender, ElapsedEventArgs e) 
{ 
    someData = dataStore.GetData(); 

    Task.Factory.StartNew(() => 
    { 
     someGrid.DataSource = someData; 
    }, uiContext); 
} 
+4

Любые причины, по которым вы не хотите использовать таймер? –

+0

Обновление сообщения с использованием таймера – davenewza

+2

Нет необходимости использовать 'Task.StartNew' внутри прошедшего таймер события; вы уже находитесь в фоновом потоке. Просто выполняйте свою длительную операцию, а затем либо используйте «StartNew» в контексте пользовательского интерфейса, либо «control.Invoke», чтобы вернуться к потоку пользовательского интерфейса. – Servy

ответ

5

Вместо Sleep() в PoolThread вы можете/должны использовать таймер.
Для WinForms вы можете просто использовать Widows.Forms.Timer.

Если вы хотите сделать это так, то да, используйте параметр Longrunning. Но он по-прежнему тратит нить.

+0

Обновление сообщения с использованием таймера – davenewza

Смежные вопросы