C#等待对象插入列表(冻结应用程序)

C#等待对象插入列表(冻结应用程序),c#,C#,我偶然发现了一个恼人的问题。我有一个计时器,每250ms(列表中的1-5个对象)为一个列表(泛型)设置一个计时器。如果它“符合”标准,它应该将对象添加到“忽略列表”中。但问题是,有时它不会将对象添加到忽略列表中,从而让它通过(即使它在250毫秒前就应该添加它) 所以我的问题是,确保循环冻结直到对象被添加到列表中(现在所有内容都在主线程上运行)的最佳方法是什么 谢谢:)在调用check()代码之前禁用计时器(或者在check()的开头,因为不清楚这里的上下文是什么),并在check()返回时启用计

我偶然发现了一个恼人的问题。我有一个计时器,每250ms(列表中的1-5个对象)为一个列表(泛型)设置一个计时器。如果它“符合”标准,它应该将对象添加到“忽略列表”中。但问题是,有时它不会将对象添加到忽略列表中,从而让它通过(即使它在250毫秒前就应该添加它)

所以我的问题是,确保循环冻结直到对象被添加到列表中(现在所有内容都在主线程上运行)的最佳方法是什么


谢谢:)

在调用
check()
代码之前禁用计时器(或者在
check()
的开头,因为不清楚这里的上下文是什么),并在
check()
返回时启用计时器(或者在
check()
的结尾)。这将阻止计时器在代码完成之前再次触发。

听起来您遇到了竞争条件-可能是在对
check()
的最后一次调用实际完成之前调用了
check()

如果你这样做,它将消除比赛条件

readonly object lockObject = new Object();

void check()
{
    lock (lockObject)
    {
        foreach (GetAll g in GetAllInList)
        {
            InIgnoreList(g);
        }
    }
}

或者,您可以结合使用
lock
bool
标志来确定
check()
方法是否仍在运行,然后在计时器事件触发时调用它。

什么是
x
?你怎么处理
b
?很抱歉回复太晚,但它确实有效,但我必须在两个循环中都使用它。谢谢:)
readonly object lockObject = new Object();

void check()
{
    lock (lockObject)
    {
        foreach (GetAll g in GetAllInList)
        {
            InIgnoreList(g);
        }
    }
}