いくつかの条件が真でない限り、アプリケーションは特定のメニュー項目にアクセスできません (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 メソッドにも同じパターンを使用する必要があります。ElapsedEventHandler
各 Item_Click メソッドを作成する必要がないことを願っています。