2016-04-08 3 views
0

Я пытаюсь прочитать строку из окна списка каждые 3 секунды и показывая элемент, прочитанный в текстовом поле? Но я не уверен в том, что мне нужно сделать, чтобы сделать цикл. Любая помощь будет оценена по достоинству.Прочитайте строку из списка каждые 3 секунды?

+0

Эй, это здорово. Что не так? Вы можете [изменить], чтобы обеспечить 1) код, в котором вы пытаетесь это сделать, и 2) описание того, что на самом деле происходит. – Will

ответ

0

Другой способ, как вы можете сделать это является использование Task Parallel Library

private readonly int _delayInMiliSeconds = 3000; 
private CancellationTokenSource _token; 
private bool _isStoped; 

public void StartUpdate() 
{ 
    if (this._isStoped) 
    { 
     throw new InvalidOperationException(); 
    } 

    this._token = new CancellationTokenSource(); 
    this.Update(); 
} 

public void StopUpdate() 
{ 
    if (this._isStoped) 
    { 
     throw new InvalidOperationException(); 
    } 

    this._isStoped = true; 
    this._token.Cancel(); 
} 

private void Update() 
{ 
    Task.Factory.StartNew(async() => 
    { 
     while (!this._token.IsCancellationRequested) 
     { 
      await Task.Delay(TimeSpan.FromMilliseconds(this._delayInMiliSeconds), this._token.Token); 

      //your repeted action has to be called here 
     } 
    }, this._token.Token); 
} 
1

Поскольку существует не так много информации, чтобы идти дальше, вот что я хотел бы сделать, если бы я хотел что-то прочитать каждый 3 секунды:

Timer timer = new Timer(3000);  // Timer in milliseconds (3 seconds) 
timer.AutoReset = true;    // Auto reset the timer 
timer.Elapsed += (sender, args) => 
{ 
    // 1. Read the list box 
    // 2. Disply read item in text box 
}; 
timer.Start(); 

код выше будет создавать экземпляр таймера с пери из 3 секунд, а событие Истекшее время срабатывает каждые 3 секунды.

+0

Это прекрасно :) Знаете ли вы, как я мог бы читать строки в порядке, так что начиная с верхней части читайте строку, переходите к следующему, читаете строку, переходите к следующему и так далее? – Waypast

+0

Вы можете просто получить элементы из списка: 'var myItems = myListBox.Items', а затем выполнить итерацию через них:' foreach (элемент var в myItems) {...} '. Если элемент уже отсортирован в ListBox, их нужно потянуть в том же порядке. Если они не отсортированы, вам нужно будет найти что-то, чтобы отсортировать их. – Ingenioushax

0

Вы должны сделать это в отдельной ветке, чтобы ваш интерфейс продолжал работать. Посмотрите, как использовать System.Threading.Timer и реализуйте его с учетом ваших потребностей.

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