2013-05-05 142 views
1

我想要做這樣的事情:如何在C#中的timerTick事件中發送參數(參數)?

private void ttimer_Tick(object sender, EventArgs e, char[,] imatrix) 
{ 
    Awesome code... 
} 

我有填充與圖像的DataGridView的一個方法,但我需要等待半我做第二每次等。所以,我的原始方法是這樣的:

private void myMethod(char[,] imatrix) 
{ 
    Original awesome code... 
} 

而且我希望myMethod是每500毫秒運行一次的timerTick事件。另外,我確實需要發送char [,] imatrix參數。我認爲有必要在timerTick事件中接收對象發件人EventArgs e,對嗎?有什麼建議麼?謝謝!

回答

0

您不能更改Ticker的Tick Tick Method簽名。相反,你可以創建一個全局變量並使用它。

您可以使用ticker的Tag屬性。將矩陣存儲在那裏。無論在何處調用Ticker的事件,都會將發件人投遞給Ticker,然後將其Tag屬性轉換爲您的矩陣。

0

也許你在發送者對象中添加一個公共屬性,然後將發送者方法參數強制轉換爲這個對象,使你可以訪問char [,]矩陣數據。

+0

我該怎麼做? – avatarbobo 2013-05-05 01:51:52

1

假設你已經有本地char[,]可用的,我會用lambda表達式:

char[,] imatrix = GetMyMatrix(); 
myTimer.Tick += (sender, args) => timer_Tick(sender, args, imatrix); 

那麼你應該有你的Tick處理程序調用真棒代碼:

private void timer_Tick(object sender, EventArgs e, char[,] imatrix) 
{ 
    myMethod(imatrix); 
    //... do something with the timer args 
} 

如果你不這樣做實際上打算對計時器的事件參數進行任何操作(只是想延遲調用myMethod(令人敬畏),完全跳過事件處理器包裝器方法,並直接從lambda函數調用它:

char[,] imatrix = GetMyMatrix(); 
myTimer.Tick += (sender, args) => myMethod(imatrix); 

編輯:關於你的問題之一是,簽名要求您只使用object sender, EventArgs e參數。但是,您不需要對它們進行任何操作,並且lambda語法可以幫助您忽略它們。哎呀,如果你想清理它多一點,說「我不關心事件語法」,你可以替換命名參數(儘管這可能是有爭議的,如果這是一個很好的做法或不):

char[,] imatrix = GetMyMatrix(); 
myTimer.Tick += (_, __) => myMethod(imatrix);