我有一个方法,它经常被不同的胎面调用。有时,当调用ThreadPool.QueueUserWorkItem(display(angebot), null);
时,我会收到一个 AgrumenNullException,说明参数 callBack
(第一个参数)为 null。
我做错了什么?
public class ai : UserControl
{
//...
public void Display(Angebote angebot)
{
lock (_syncObj) { _current = angebot; }
ThreadPool.QueueUserWorkItem(display(angebot), null);
}
private WaitCallback display(Angebote angebot)
{
// doing something
}
//...
}
ThreadPool.QueueUserWorkItem
将执行 display(Angebote)
返回的WaitCallback
委托中定义的工作。 我推测您的display
方法有时会返回 null。
您的意图是在后台线程中执行display(angebot)
,还是该方法识别应执行的方法?
如果您认为您的显示方法应该在后台线程中执行:
private WaitCallback display(Angebote angebot)
{
// doing something in a background thread
}
然后,您的代码应如下所示:
ThreadPool.QueueUserWorkItem(display, angebot);
private void display(object state)
{
Angebot angebot = (Angebot)state;
// doing something in a background thread
}
编辑:如果是后者,display
正在弄清楚要执行的后台线程,那么也许你有如下所示的东西:
private WaitCallback display(Angebote angebot)
{
if (angebot.Something)
{
return new WaitCallback(BackgroundTask1);
}
else
{
return null;
}
}
但是由于您尚未发布该代码,因此我不确定。 在这种情况下,返回null
对 ThreadPool.QueueUserWorkItem
无效。