0

さまざまなトレッドから頻繁に呼び出されるメソッドがあります。ThreadPool.QueueUserWorkItem(display(angebot), null);呼び出されると、パラメーターcallBack(最初のパラメーター)がnullであることを示すAgrumenNullExceptionが発生することがあります。

私は何が間違っているのですか?


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
    }
    //...
}
4

1 に答える 1

1

は、によって返されるデリゲートThreadPool.QueueUserWorkItemで定義されているように作業を行います。あなたのメソッドは時々nullを返すと思います。WaitCallbackdisplay(Angebote)display

バックグラウンドスレッドで実行するつもりですdisplay(angebot)か、それともそのメソッドはどのメソッドを実行する必要があるかを識別しますか?

displayメソッドをバックグラウンドスレッドで実行する必要があると考えている場合:

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

于 2012-06-24T14:34:12.600 に答える