Поскольку вы хотите передать делегат в WaitCallBack
.Проще говоря, вы хотите указать WaitCallBack
метод, который должен выполнить поток, но вы не хотите вызывать этот метод сейчас .
В вашем примере
ThreadPool.QueueUserWorkItem(new WaitCallback(Multiply(2, 3)));
метод Multiply
будет вызван напрямую, а его результат должен быть передан конструктору WaitCallback
(что невозможно).
Компилятору не удастся решить,Вы хотели позвонить Multiply
здесь или просто сказать WaitCallback
, что должен делать этот вызов, потому что это будет абсолютно тот же синтаксис.
Вот почему вы говорите, какой метод метод, который он должен вызывать и - отдельно - какой аргумент он должен передать, когда он в конечном итоге вызывает его.
Но вместо этого вы можете использовать лямбду:
ThreadPool.QueueUserWorkItem(o => Multiply(2, 3));
Теперь поток может выполнить эту лямбду, которая в свою очередь вызывает Multiply(2, 3)
(отбрасывая аргумент o
).