如何使用wait或thread等到事件发生

时间:2013-03-14 06:40:19

标签: c# .net multithreading winforms listbox

在winforms中说我有一个列表框。

我还有一个线程,等待列表框中有一些项目。

说当前列表框为空,所以线程必须等待。

现在说,列表框中有一些项目必须开始执行。

2 个答案:

答案 0 :(得分:1)

你是否认为Timers可以定期检查列表框项目是否有一些项目 启动你的线程并停止检查。

答案 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...
    }       
}