在我過去的幾個項目中,我遇到了需要將多個參數傳遞給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你有一點,我也是用編譯器把踏板推向金屬的粉絲。但是我也認爲在某些情況下,爲了讓其他人能夠毫無困難地理解代碼,讓代碼變得更加冗長是很好的。相反,可以說我應該添加更多的內置評論。 –