2013-03-14 106 views
3

用winforms說我有一個列表框。如何使用等待或線程等待事件發生

我也有一個線程,直到列表框中有一些項目。

說當前列表框是空的,所以線程必須等待。

說現在列表框中有一些項目線程必須開始執行。

+0

你試過了什麼嗎?顯示你的努力和閱讀[常見問題]和[問] – 2013-03-14 06:42:28

+1

爲什麼這需要成爲一個線程?你爲什麼不能處理一個事件? – 2013-03-14 06:48:08

+0

哪個事件? ListBox中沒有ItemsChanged或ItemsAdded事件 – TalentTuner 2013-03-14 06:49:50

回答

1

你有沒有想過定時器可以定期檢查列表框項目,如果有一些項目比 開始你的線程並停止檢查。

0

你可以使用線程,但我認爲用事件處理方法會更好。默認情況下,ListBox類沒有添加項目的事件,但您可以擴展該類以創建自己的項目。下面是你會怎麼做一個例子:

public class MyListBox : ListBox 
{ 
    private const int LB_ADDSTRING = 0x180; 
    private const int LB_INSERTSTRING = 0x181; 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == LB_ADDSTRING || m.Msg == LB_INSERTSTRING) 
     { 
      OnItemAdded(this, new EventArgs()); 
     } 
     base.WndProc(ref m); 
    } 

    public event EventHandler ItemAdded; 
    protected void OnItemAdded(object sender, EventArgs e) 
    { 
     if (ItemAdded != null) 
      ItemAdded(sender, e); 
    } 
} 

一旦你取得了這個類,只是用它的形式。

public partial class Form1 : Form 
{ 
    MyListBox lb = new MyListBox(); 

    public Form1() 
    { 
     InitializeComponent(); 

     this.Controls.Add(lb); 
     lb.ItemAdded += lb_ItemAdded; 
    } 

    void lb_ItemAdded(object sender, EventArgs e) 
    { 
     // process item here... 
    }  
}