我有一种方法可以被不同的踏板频繁调用。有时我在调用ThreadPool.QueueUserWorkItem(display(angebot), null);
时会得到一个AgrumenNullException,说明参数callBack
(第一个参数)为空。
我做错了什么?
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
}
//...
}
答案 0 :(得分:1)
ThreadPool.QueueUserWorkItem
将执行WaitCallback
返回的display(Angebote)
委托中定义的工作。我猜测你的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
无效。