gpt4 book ai didi

c# - 如何避免复制/粘贴许多事件处理程序

转载 作者:行者123 更新时间:2023-11-30 12:30:14 27 4
gpt4 key购买 nike

除非某些条件为真 (DataRepository.IsAllDataLoaded),否则我的应用程序无法访问特定菜单项。我想出了这段代码,效果很好。它首先检查条件。如果它还没有准备好,它会调用一个定时器,它会等待几毫秒并再次调用相同的方法。计时器需要一个 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));

关于c# - 如何避免复制/粘贴许多事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16714163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com