我的应用程序无法访问特定的菜单项,除非某些条件为真(DataRepository.IsAllDataLoaded).我想出了这个代码,效果很好.它首先检查条件.如果它没有准备好,它会调用一个计时器,它等待几毫秒并再次调用相同的方法. Timer需要一个ElapsedEventHandler.
public void FirstMenuItem_Click(object sender, RoutedEventArgs e)
{
if (!DataRepository.IsAllDataLoaded)
{
WaitForDataLoading(FirstTimedEvent);
}
else
{
Dispatcher.BeginInvoke(new Action(() =>
{
IndividualEntryWindow Window = new IndividualEntryWindow();
Window.Show();
}));
}
}
private void FirstTimedEvent(object source, ElapsedEventArgs e)
{
FirstMenuItem_Click(null, null);
}
private static void WaitForDataLoading(ElapsedEventHandler timerEvent)
{
Timer t = new Timer();
t.Interval = 0.2;
t.AutoReset = false;
t.Elapsed += new ElapsedEventHandler(timerEvent);
t.Start();
}
最初,FirstMenuItem_Click是唯一的方法.我不得不为我的计时器添加FirstTimedEvent处理程序.有没有办法避免创建ElapsedEventHandler?我可以在FirstMenuItem_Click方法中内联创建吗?
我现在必须对许多其他Item_Click方法使用相同的模式.我希望我不必为每个Item_Click方法创建一个ElapsedEventHandler.
最佳答案 使用匿名lambda表达式:
WaitForDataLoading((s,e) => FirstMenuItem_Click(null, null));