2013-03-14 94 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... 
    }  
}