BackgroundWorker忽略foreach迭代

时间:2014-05-09 09:15:28

标签: c# multithreading foreach backgroundworker nullreferenceexception

这是

的继续

我已经缩小了问题的范围,现在当我在调试模式下运行时,我可以看到由于某些原因并非所有Foreach次迭代都已完成,我每次迭代都会进行调试,当程序停止时,我可以看到我在4个项目列表上进行迭代,但循环只执行3次,导致程序抛出NullrefrenceException - 因为并非所有对象都已创建。 / p>

这是我的循环

foreach (var system in allSystems.ToList())
{
    Debug.WriteLine("inside Foreach in system: " + system.Name + " interface " + system.Interfaces.Count + " structs " + system.Structs.Count);
    if (nodes == null)
        Debug.WriteLine("Node is Null");
        try
        {
            Debug.WriteLine("Before add node");
            lock (networkLocker)
            {
                Debug.WriteLine("trying to add: " + system.Name + " " + system.InputNum + " " + system.OutputNum + " " + system.Interfaces.Count + " " + system.Enums.Count + " " + system.Structs.Count);

                nodes.Add(CreateNode(system.Name, new Point(width, height), false, system.InputNum, system.OutputNum, system.Interfaces, system.Enums, system.Structs, update));
            }
            Debug.WriteLine("Success adding new node to list");
        }
        catch (Exception ex)
        {
            logger.addMessage("Error in adding new node to list " + ex.Message + " Inner: " + ex.InnerException.Message);
            Debug.WriteLine("Error in adding new node to list " + ex.Message + " Inner: " + ex.InnerException.Message);
        }

    width += 150;
    if (width >= 700)
    {
        width = 0;
        height += 100;
    }
}

allSystems包含4个元素(我可以在调试时看到),但Debug.WriteLine("inside Foreach in system: " + system.Name + " interface " + system.Interfaces.Count + " structs " + system.Structs.Count);仅打印3次,列表nodes实际上只包含3个元素。

有什么想法?

因此,为了解释我在使用调试器添加了2张图片的情况:

这是我正在迭代的列表:

List of 4

这是应该在每次迭代时添加节点的节点列表:

nodesList

1 个答案:

答案 0 :(得分:0)

我认为您的Debug.WriteLine("inside ...")会引发异常,导致system.Interfacessystem.Structsnull

你应该进入VS Debug - Exception并启用所有类型的异常以找到引发异常的异常。为了更容易一次启用或禁用所有异常,您应该查看Exception Breaker,他只是将此行为放在一个按钮中。