等待列表中存在的项

本文关键字:存在 列表 等待 | 更新日期: 2023-09-27 17:49:30

我目前正在寻找一种方法来监控列表中要添加的项目(尽管它可能已经在列表中)具有一定的ID。下面的例子演示了我想要做的事情,但是我希望有一个更简洁的方法。

var list = new List<string>();
var task = new Task<bool>(() =>
{
    for (int i = 0; i < 10; i++)
    {
        if (list.Contains("Woft"))
            return true;
        Thread.Sleep(1000);
    }
    return false;
});
如果有任何建议,我都将非常感谢,如果需要,我可以详细说明。

编辑:我不确定我会如何使用CollectionChanged处理程序,仍然不确定我是否足够好地描述了这个问题,这里是一个更完整的例子。

class Program
{
    private static List<string> receivedList = new List<string>();
    static void Main(string[] args)
    {
        var thing = new item() { val = 1234, text = "Test" };
        var message = new message() { id = "12", item = thing };
        //This would be a message send
        //in the receiver we would add the message id to the received list.
        var task2 = new Task(() =>
        {
            Thread.Sleep(2000);
            receivedList.Add(message.id);
        });
        task2.Start();
        var result = EnsureReceived(thing, message.id);
        if (result == null)
        {
            Console.WriteLine("Message not received!");
        }
        else
        {
            Console.WriteLine(result.text + " " + result.val);
        }
        Console.ReadLine();
    }
    //This checks if the message has been received
    private static item EnsureReceived(item thing, string id)
    {
        var task = new Task<bool>(() =>
        {
            for (int i = 0; i < 10; i++)
            {
                if (receivedList.Contains(id))
                    return true;
                Thread.Sleep(1000);
            }
            return false;
        });
        task.Start();
        var result = task.Result;
        return result ? thing : null;
    }
}
class message
{
    public string id { get; set; }
    public item item { get; set; }
}
class item
{
    public string text { get; set; }
    public int val { get; set; }
}

等待列表中存在的项

听起来您想做的是使用ObservableCollection并订阅CollectionChanged事件。这样,每当修改集合时就会触发事件。这时,您可以检查集合是否有您期望的元素。

更好的是,CollectionChanged事件处理程序将接收NotifyCollectionChangedEventArgs,其中包含NewItems属性。

您可以实现自己的类型,它拦截所有添加项和暴露ReadOnlyList的操作。然后创建一个带有添加项目值的事件ItemAdded(当添加一个集合时,您将不得不增加多个事件)。订阅,查看,做任何事