2011-01-23 40 views
5

在這下面的函數,每當我做定時器在C#中,如何控制什麼被送到timer1_tick

timer1.Enabled = true 

private void timer1_Tick(object sender, EventArgs e) 
{ 
//code here 
} 

我如何控制被髮送到(object sender, EventArgs e)是被執行?

我想使用它的參數

+0

擁有「全局」類成員可能是最好的方法,解釋你的f這裏的目標,也許我們會找到更好的方式來滿足你的需求。 – 2011-01-23 11:22:49

+0

我想運行一個下降圖標的動畫,所以我想用我定義的timer1_tick參數,但我不能。但是我還有另外一個問題,那就是當我做timer1.Enabled = true的時候,它不會馬上啓動,其他的代碼會被執行,只有最後timer1_tick中的代碼纔會被執行。 – 2011-01-23 13:16:15

+0

@Alon在發表評論時使用`@`像我現在所做的那樣通知否則大多數人不會看到您的評論。對於你的問題:定時器工作在單獨的線程(異步),所以啓動定時器不會停止父線程的執行。要立即執行它,您可以直接調用它:`timer1_Tick(timer1,EventArgs.Empty);` – 2011-01-23 14:27:43

回答

6

方法簽名是固定的,所以你不能額外的參數傳遞給它。但是,this引用在事件處理函數內有效,因此您可以訪問該類的實例成員(在class內但在任何方法之外聲明的變量)。

0

如果您要訪問的timer1_tick方法定時器的財產,你可以做通過

this.timer1 ex: this.timer1.Enabled =false; 

Timer timer = (Timer) sender; 
timer.Enabled = false; 
0

也許你可以讓來自定時器類繼承,並在那裏,鑄就將來自Timer的事件(來自Timer)轉換爲tick_user事件或類似的東西,它修改de params並將其放入EventArgs(這是正確的地方,而不是發件人)您想要的其他參數。你也可以製作一個參數更多或更少的方法,這取決於你。

希望這會有所幫助。

3

1)您可以使用定時器的Tag屬性爲userState

void timer1_Tick(object sender, EventArgs e) 
{ 
    Timer timer = (Timer)sender; 
    MyState state = timer.Tag as MyState; 
    int x = state.Value; 
} 

2)您可以使用引用類型的字段,計時器的線程讀取它

void timer1_Tick(object sender, EventArgs e) 
{ 
    int x = _myState.Value; 
} 

3)您可以使用System.Threading.Timer將狀態傳遞給定時器事件處理程序

Timer timer = new Timer(Callback, state, 0, 1000); 
相關問題