110,567
社区成员
发帖
与我相关
我的任务
分享
if (ftc.ShowDialog() == true)
{
if(...)
{
private DispatcherTimer DT;
DT.Tick += new EventHandler((sender, e)=>move_failure_by_flag(failure_name, flag));
DT.Interval = new TimeSpan(0, 0, 0, 1);
DT.Start();
//DT.Tick -= new EventHandler((sender, e)=>move_failure_by_flag(failure_name, flag));
}
}
private async void move_failure_by_flag(string failure_name, int tick_flag) //用async是因为函数里要用到await.Task.Delay()
{
if(...)//飞机达到5000英尺
{
move_to_current_failure(failure_name);//设置其引擎失火
DT.Stop();
}
}
static System.Timers.Timer timer1 = new System.Timers.Timer(2000);
static DateTime dt = DateTime.Now.AddSeconds(7);
static void Main(string[] args)
{
timer1.Enabled = true;
timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
timer1.Start();
Console.ReadLine();
}
private static void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Console.WriteLine("11");
if(dt<=DateTime.Now)
timer1.Elapsed -= new ElapsedEventHandler(timer1_Elapsed);
}
ElapsedEventHandler proc = null;
然后才为 proc 赋值。using System;
namespace ConsoleApp1
{
class Program
{
static System.Timers.Timer tmr;
static void Main(string[] args)
{
tmr = new System.Timers.Timer();
var h = new MyHandler(0, tmr);
tmr.Start();
Console.WriteLine("................按任意键结束");
Console.ReadKey();
}
}
class MyHandler
{
public int i;
System.Timers.Timer tmr;
public MyHandler(int i, System.Timers.Timer tmr)
{
this.tmr = tmr;
tmr.Elapsed += Tmr_Elapsed;
tmr.Interval = 1000;
}
private void Tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
++i;
Console.WriteLine(i);
if (i == 5)
tmr.Elapsed -= Tmr_Elapsed;
}
}
}
你觉得比较“乱”的外部变量,自己封装到一个 class 中,更加清晰,但是代码多了一些。
所以我还是比较喜爱匿名委托的语法。using System;
namespace ConsoleApp1
{
class Program
{
static System.Timers.Timer tmr;
static void Main(string[] args)
{
int i = 0;
tmr = new System.Timers.Timer();
System.Timers.ElapsedEventHandler proc = null;
proc=new System.Timers.ElapsedEventHandler((obj, e) =>
{
++i;
Console.WriteLine(i);
if (i == 5)
tmr.Elapsed -= proc;
});
tmr.Elapsed += proc;
tmr.Interval = 1000;
tmr.Start();
Console.WriteLine("................按任意键结束");
Console.ReadKey();
}
}
}
DT.Tick -= new EventHandler((sender, e)=>move_failure_by_flag(failure_name, flag));
DT.Tick += new EventHandler((sender, e)=>move_failure_by_flag(failure_name, flag));
EventHandler _handler = null;
订阅事件之前初始化EventHandler对象
_handler= new EventHandler((sender, e)=>move_failure_by_flag(failure_name, flag));
DT.Tick +=_handler;
停止时取消订阅;
DT.Tick -=_handler;
DT.Tick -= new EventHandler((sender, e)=>move_failure_by_flag(failure_name, flag));
你自己都有取消订阅的代码,想问什么?DT.Tick += new EventHandler((sender, e)=>move_failure_by_flag(failure_name, flag));
如何取消订阅?
请问具体是哪个地方我没有说清楚?