Нет, это, вероятно, не будет работать - но это не только вложение (см. Ответ Даринса), но и объект message
, который вы также используете в качестве итератора - вам придется скопировать его в локальный экземпляр перед вызовом потока как это:
var messageCopy = message;
new Thread(a =>
MailHelper.SendMessage(
new ListDictionary { { "$Url$", messageCopy .Url } },
messageCopy.Mail.Headers.From.Address,
"EmailConvertSuccess.txt",
a as MailAttachment)
).Start(attachment);
Если вы действительно хотите, чтобы вы могли передать это в качестве параметра - точно так же, как Дарин сделал с его вариантом, но я не думаю, что это действительно необходимо)