在這下面的函數,每當我做定時器在C#中,如何控制什麼被送到timer1_tick
timer1.Enabled = true
private void timer1_Tick(object sender, EventArgs e)
{
//code here
}
我如何控制被髮送到(object sender, EventArgs e)
是被執行?
我想使用它的參數
在這下面的函數,每當我做定時器在C#中,如何控制什麼被送到timer1_tick
timer1.Enabled = true
private void timer1_Tick(object sender, EventArgs e)
{
//code here
}
我如何控制被髮送到(object sender, EventArgs e)
是被執行?
我想使用它的參數
方法簽名是固定的,所以你不能額外的參數傳遞給它。但是,this
引用在事件處理函數內有效,因此您可以訪問該類的實例成員(在class
內但在任何方法之外聲明的變量)。
如果您要訪問的timer1_tick方法定時器的財產,你可以做通過
this.timer1 ex: this.timer1.Enabled =false;
或
Timer timer = (Timer) sender;
timer.Enabled = false;
也許你可以讓來自定時器類繼承,並在那裏,鑄就將來自Timer的事件(來自Timer)轉換爲tick_user事件或類似的東西,它修改de params並將其放入EventArgs(這是正確的地方,而不是發件人)您想要的其他參數。你也可以製作一個參數更多或更少的方法,這取決於你。
希望這會有所幫助。
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);
擁有「全局」類成員可能是最好的方法,解釋你的f這裏的目標,也許我們會找到更好的方式來滿足你的需求。 – 2011-01-23 11:22:49
我想運行一個下降圖標的動畫,所以我想用我定義的timer1_tick參數,但我不能。但是我還有另外一個問題,那就是當我做timer1.Enabled = true的時候,它不會馬上啓動,其他的代碼會被執行,只有最後timer1_tick中的代碼纔會被執行。 – 2011-01-23 13:16:15
@Alon在發表評論時使用`@`像我現在所做的那樣通知否則大多數人不會看到您的評論。對於你的問題:定時器工作在單獨的線程(異步),所以啓動定時器不會停止父線程的執行。要立即執行它,您可以直接調用它:`timer1_Tick(timer1,EventArgs.Empty);` – 2011-01-23 14:27:43