在我过去的几个项目中,我遇到了需要将多个参数传递给Threading.Timer
回调方法的情况。不幸的是,构造函数只接受一个参数object
。不想使用全局变量,我已经使用来克服这个问题开始的模式是在一个匿名方法传递创建计时器时,使用编译器的能力,捕捉到的变量我的优势,比如:将多个参数传递给Threading.Timer回调方法的最佳方式是什么?
public void SendEmailsRepeatedly(IEnumerable<SimpleEmail> emails, int sendRepeatedlyDelayMS)
{
Tokenizer tokenizer = new StandardTokenizer();
sendRepeatedlyTimer = new Timer(
SendRepeatedlyCallback,
(Action)delegate()
{
TokenizeAndSendEmails(emails, tokenizer);
},
0,
sendRepeatedlyDelayMS);
}
private void SendRepeatedlyCallback(object state)
{
if (!abort)
{
Action sendEmails = (Action)state;
sendEmails();
}
}
所以我的问题是,这是一个公然的黑客?有没有更好的或推荐的方法来做到这一点?
我打算把它给你,因为这可能是最“可读”的方法,并且我确信我的同事已经对我的大部分代码感到困惑。 –
我没有看到任何好处。为什么在编译器可以为你做所有这些样板工作时自己创建一个类? –
@Jon你有一点,我也是用编译器把踏板推向金属的粉丝。但是我也认为在某些情况下,为了让其他人能够毫无困难地理解代码,让代码变得更加冗长是很好的。相反,可以说我应该添加更多的内置评论。 –