2015-07-21 51 views
0

我試圖添加標籤ID(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); 

    } 
} 

要將項目添加到您的列表框

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

工作100%非常感謝 –

+0

對不起,最後一個問題?如果VAR exp爲空,我該如何處理? –

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

相關問題