对象不为null,仍然会引发异常

时间:2011-05-15 18:01:24

标签: c# invoke

答案:它出现在else代码中,但我认为代码没有理由不指向该行。

有人可以提出一个想法,我怎么可能在Invoke方法中得到“对象引用未设置为对象的实例”:

delegate void t(tabdescriptor tab);
internal void AddItem(tabdesciptor tab)
{
    if (InvokeRequired)
    {
        t inv = new t(AddItem);
        if (inv != null && tab!= null)
            Invoke(inv, tab);
    }
    else
    {
        ....
    }
}

3 个答案:

答案 0 :(得分:3)

我不确定实际问题是什么,考虑你的例子不能是执行的代码,但请尝试这样的事情:

internal void AddItem(tabdesciptor tab)
{
    if (InvokeRequired)
    {
        Invoke(new Action<tabdescriptor>(AddItem), tab);
    }
    else
    {
        //...
    }
}

另外请确保实际上else部分中的任何内容都失败了。

答案 1 :(得分:1)

如果我没记错的话,这个异常可能来自于被调用的方法。如果将try / catch放在AddItem方法的else中并且在catch中有一个断点,你会捕获异常吗?

internal void AddItem(tabdesciptor tab)
{
    if (InvokeRequired)
    {
        t inv = new t(AddItem);
        if (inv != null && tab!= null)
            Invoke(inv, tab);
    }
    else
    {
        try
        {
            ....
        }
        catch
        {
            // breakpoint here
        }
    }
}

答案 2 :(得分:0)

目前还不清楚这是否是给定示例中的错误,但tab永远不会检查null,但它会作为参数传递。

可能是null,或者:

此外,inv在创建null之后立即进行检查(C / C ++很好,但在C#中不必要,因为它在失败时会抛出OutOfMemoryException),但它已完成在检查o之前null