2015-07-21 2 views
0

Я пытаюсь добавить идентификатор тега (RFID) в список, а затем удалить его через 30 секунд. Каков наилучший способ сделать это?Добавить элемент в список, а затем удалить через 30 секунд

txtTagID.Text = s1.Replace(" ", "").ToLower(); 
if (lstTagsHold.Items.Contains(txtTagID.Text) == false) 
{ 
    lstTagsHold.Items.Add(txtTagID.Text); 
} 

ответ

0

Бросьте System.Windows.Forms.Timer на вашей форме и установите интервал примерно до 1 секунды (или меньше в зависимости требуемая точность). Объявите класс ExpiringItem для хранения времени добавления записи. В вашем событии timer_click проверьте устаревшие элементы и удалите их.

class ExpiringItem 
{ 
    private string text; 
    public ExpiringItem(string text) 
    { 
     this.text = text; 
     this.Added = DateTime.Now; 
    } 
    public DateTime Added { get; private set; } 
    public override string ToString() 
    { 
     return text; 
    } 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    for (int i = listBox1.Items.Count -1; i > -1; i--) 
    { 
     var exp = (ExpiringItem)listBox1.Items[i]; 
     var timeVisible = DateTime.Now - exp.Added; 
     if (timeVisible.TotalSeconds > 30) 
      listBox1.Items.RemoveAt(i); 

    } 
} 

Чтобы добавить элементы в ListBox сделать

lstTagsHold.Items.Add(new ExpiringItem(txtTagID.Text)); 
+0

Работа 100% много спасибо –

+0

К сожалению, последний вопрос? Если значение VAR exp равно null, как мне это обработать? –

0

Попробуйте использовать контроль таймера (если вы используете WinForms)

+0

Я использую WinForms но может быть несколько записей в разное время. Я хочу только удалить запись, которая была там в течение 30 секунд. –

0
// Declare the timer 
private static System.Timers.Timer objTimer = new System.Timers.Timer(30000); 

// Attach the event handler 
objTimer.Elapsed += OnTimedElapsed; 


private static void OnTimedElapsed(Object source, System.Timers.ElapsedEventArgs e) 
    { 
     lstTagsHold.Items.Remove(txtTagID.Text); 
    } 
+0

'System.Timers.Timer' использует рабочие потоки, поэтому не может быть потокобезопасным для выполнения' lstTagsHold.Items.Remove (txtTagID.Text) 'в Перезвони. _ [[Серверный класс System.Timers.Timer предназначен для использования с рабочими потоками в многопоточной среде] (https://msdn.microsoft.com/en-us/library/system.timers.timer (v = vs.110) .aspx) "_ – MickyD

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