ThreadPool.QueueUserWorkItem中的AgrumenNullException

时间:2012-06-24 14:25:23

标签: c# threadpool argumentnullexception queueuserworkitem

我有一种方法可以被不同的踏板频繁调用。有时我在调用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
    }
    //...
}

1 个答案:

答案 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;
    }
}

但由于你还没有发布该代码,我不确定。在这种情况下,返回nullThreadPool.QueueUserWorkItem无效。