ある機能をプログラムで実現する為に、
少し視点を変えて、別の方法を思いつくと、
意外と簡単に実装ができてしまう事があります。
例えばバックグラウンドで読み込みを行っている時に、
「Loading…」と表示される画面はよくあります。
ユーザーから見れば「Loading…」の画面が、
新たに作られて、表示されたように見えますね。
そのままコードにするとこんな感じでしょうか。
(クラスやメソッドなどは仮のものです。)
LoadingView loadingView = new LoadingView();
loadingView.Show();
// バックグラウンドで行う処理
loadingView.Close();
これでも問題ありませんが、
複数のバックグラウンド処理が重なった場合などは、
さらに処理を考える必要があったり、
表示の部分がシーケンス的であったり、少し複雑です。
視点を変えて、
「Loading…」画面の可視性が切り変わると考えた場合はこうなります。
loadingView.Visible = true;
// バックグラウンドで行う処理
loadingView.Visible = false;
「Loading…」の画面が表示されていない場合でも、
見えていないだけでずっと画面内に存在しているイメージですね。
実際には loadingView.Visible の部分は、
LoadingView の可視性を表すプロパティなどにしておきます。
こうすると、シーケンス的だった表示がステート(状態)となり、
制御しやすくなります。
難しい問題には頭を柔らかくして、
様々な視点から柔軟な発想ができると、
もっと単純に解決できるかもしれませんね。