Просто в интересах других, вы можете передавать нулевые аргументы делегатам (если тип позволяет это? Разъяснение необходимо здесь). В вашем случае IAsyncResult позволит это сделать.
Что касается отладки, исключение возникает в Invoke, поскольку вы выполняете отладку в заданном потоке A, исключение происходит в потоке B. Вы можете установить точку останова для нескольких потоков. Точка останова - код Thread B, и вы увидите исключение ближе к источнику или рядом с ним.
Обратите внимание, что ваш отладчик будет перепрыгивать, если несколько потоков одновременно запускают код. Отладка в нескольких потоках всегда, по крайней мере, немного сложнее, но удовлетворяет, когда вы решаете проблемы.
Вы могли бы также улучшить свой код ответа, чтобы проверить нулевое значение, прежде чем проверять InvokeRequired, поскольку это не зависит от потока для вашей логики (ваш код проверяет это непосредственно перед использованием, после Invoking). Это сохранит нажатие Invoke на насос сообщений (при условии WinForms).