我会尽量保持简单。这是我的方法,只是开始 - 我理解下面的代码不正确 - 这正是我目前所拥有的:
public static void GetActorsFromCastList(TmdbMovieCast cast)
{
// use timers here
List<Cast> liCast = cast.cast;
Timer actorTimer = new Timer(1000);
// put the below into a foreach loop to get a new personId each time???
foreach (var i in liCast)
{
actorTimer.Elapsed += new ElapsedEventHandler((sender, e) => RunActorEvent(sender, e, i.id));
actorTimer.Start();
}
}
public static void RunActorEvent(object sender, ElapsedEventArgs e, int personId)
{
// run a single API call here to get a Person (actor)
_actors.Add(_api.GetPersonInfo(personId));
}
正如你所看到的,我创建了一个System.Timer
,正如上面设计的那样,想法是每秒调用一次,RunActorEvent
每次传递一个不同的值PersonId
。最终目标是每秒调用RunActorEvent
一次,但每次传入一个新的PersonId
. 我已经创建了ElapsedEventHandler
这样我添加了第三个参数PersonId
。
这就是我所在的地方。我面临的困境是这看起来不正确。我的意思是,我有一个foreach
循环,它基本上通过每次迭代创建一个新的 ElapsedEventHander,我认为这不应该是设计。
问题:如何在每次调用时创建一个System.Timer
和一个对应的ElapsedEventHandler
但将一个新变量 ( PersonId
)传递给(事件处理程序)?RunActorEvent
ElapsedEventHander