除非某些条件为真 (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 方法使用相同的模式。我希望我不必ElapsedEventHandler
为每个 Item_Click 方法创建一个。