好的,我System.Timers.Timer在.Net 4中使用C#.
我有我的计时器对象:
var timer = new Timer {Interval = 123};
Run Code Online (Sandbox Code Playgroud)
我有一个Timer Elapsed事件处理程序指向一个像这样的方法:
timer.Elapsed += MyElapsedMethod;
Run Code Online (Sandbox Code Playgroud)
我的方法看起来像这样:
static void MyElapsedMethod(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Foo Bar");
}
Run Code Online (Sandbox Code Playgroud)
我想将一个字符串传递给这个方法,我该怎么做?
谢谢
Jar*_*Par 73
最简单的方法是将事件处理程序更改为匿名函数.它允许您在声明点传递字符串.
string theString = ...;
timer.Elapsed += (sender, e) => MyElapsedMethod(sender, e, theString);
static void MyElapsedMethod(object sender, ElapsedEventArgs e, string theString) {
...
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*ier 18
如果您希望能够再次注销"Elapsed"事件处理程序,则不应在不记住变量的情况下使用委托.
所以另一种解决方案可能是基于Timer创建一个自定义类.只需添加您喜欢的任何成员,并从"Elapsed"事件处理程序的"sender"参数中获取自定义Timer对象:
class CustomTimer : System.Timers.Timer
{
public string Data;
}
private void StartTimer()
{
var timer = new CustomTimer
{
Interval = 3000,
Data = "Foo Bar"
};
timer.Elapsed += timer_Elapsed;
timer.Start();
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
string data = ((CustomTimer)sender).Data;
}
Run Code Online (Sandbox Code Playgroud)
这个策略当然适用于其他事件和类,只要基类没有被密封.
| 归档时间: |
|
| 查看次数: |
44048 次 |
| 最近记录: |