对象不为空并且仍然引发异常

发布于 2024-11-07 12:47:45 字数 378 浏览 5 评论 0原文

答案:它在 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
    {
        ....
    }
}

Answer: it was in the else code, but I thought there is no reason that code wouldn't point to that line.

Can someone offer an idea how it could be possible that I get "Object reference not set to an instance of an object" on this at Invoke method:

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
    {
        ....
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

横笛休吹塞上声 2024-11-14 12:47:45

我不确定实际问题是什么,考虑到您的示例不能是执行的代码,但请尝试这样的操作:

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

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

I'm not exactly sure what the actual issue is considering your example cannot be the code that executes, but please try something like this:

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

Also please make sure that it's not actually whatever is in the else part that fails.

没︽人懂的悲伤 2024-11-14 12:47:45

如果我没记错的话,这个异常可能来自被调用的方法内部。如果您在 AddItem 方法的 else 内放置一个 try/catch 并在 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
        }
    }
}

If I remember correctly, this exception could be coming from inside the invoked method. If you place a try/catch inside the else of the AddItem method and a breakpoint inside the catch, do you catch the exception?

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
        }
    }
}
累赘 2024-11-14 12:47:45

目前尚不清楚给定示例中是否存在错误,但从未检查 tab 是否为 null,但它作为参数传递。

它可能是 null,或者:

另外,inv 在创建后立即检查 null (在 C/C++ 中很好,但在 C# 中不必要)因为它抛出 OutOfMemoryException失败),但它是在检查 o 是否为 null 之前完成的。

It's unclear whether it's a mistake in the given example, or not, but tab is never checked for null, yet it is passed as the argument.

Either it's probably null, or:

Also, inv is checked for null right after creating it (Good in C/C++, but unnecessary in C# as it throws an OutOfMemoryException upon failure), but it is done before checking o for null.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文