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