如何使用wait或线程等待事件发生

本文关键字:事件 等待 线程 何使用 wait | 更新日期: 2023-09-27 18:03:54

假设在winforms中我有一个列表框

和我也有一个线程等待,直到有一些项目在列表框。

假设当前列表框为空,因此线程必须等待。

假设现在在listbox中有一些项目,线程必须开始执行

如何使用wait或线程等待事件发生

你有没有想过计时器,它可以定期检查列表框中的项目,如果有一些项目比启动你的线程,停止检查。

您可以使用线程,但我认为您最好使用基于事件的方法进行处理。默认情况下,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...
    }       
}