質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

7455閲覧

スプラッシュスクリーン表示中の処理

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/11/24 19:25

編集2016/11/25 07:26

###前提・実現したいこと
C#とWPFでスプラッシュスクリーンの実装をしているのですが、表示→処理→MainWindow表示の流れがよくわかりません。

なぜスプラッシュスクリーンを表示しているのかと言うと、アップデート処理を可視化するためであり、MainWindowを表示するのに何らかの処理が必要だとかそういうことではありません。

###該当のソースコード
WinSplash.xaml.cs

C#

1 2#region Using文 3using System; 4using System.Collections.Generic; 5using System.ComponentModel; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows; 10using System.Windows.Controls; 11using System.Windows.Data; 12using System.Windows.Documents; 13using System.Windows.Input; 14using System.Windows.Media; 15using System.Windows.Media.Imaging; 16using System.Windows.Shapes; 17#endregion 18 19namespace MineLab 20{ 21 22 #region WinSplashクラス 23 public partial class WinSplash : Window 24 { 25 26 public WinSplash() { InitializeComponent(); } 27 28 //ここに色々な処理が入りそうだけどよくわからない。 29 30 } 31 #endregion 32 33} 34

App.xaml.cs

C#

1using System; 2using System.Collections.Generic; 3using System.Configuration; 4using System.Data; 5using System.Linq; 6using System.Threading.Tasks; 7using System.Windows; 8 9namespace MineLab 10{ 11 12 public partial class App : Application 13 { 14 15 private WinSplash _splash; 16 public WinSplash Splash { get; private set; } 17 18 [STAThread] 19 public static void Main() 20 { 21 22#if DEBUG 23 24 var _msg = MessageBox.Show("現在Alphaビルドが起動しています。\n\rAlphaビルドは最新の技術が盛り込まれていますが、非常に不安定です。\n\r続行しますか?", "MineLab", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); 25 26 if (_msg != MessageBoxResult.Yes) { return; } 27 28#endif 29 30 App _app = new App(); 31 _app.Run(); 32 33 } 34 35 public App() : base() 36 { 37 38 Startup += ShowSplash; 39 40 } 41 42 [STAThread] 43 private void ShowSplash(object sender, StartupEventArgs e) 44 { 45 46 Splash = new WinSplash(); 47 Splash.Show(); 48 49 } 50 51 } 52}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

http://www.atmarkit.co.jp/ait/articles/1511/04/news027.html
こちらを参考にスプラッシュウィンドウをまず表示して、MainWindow表示に必要な処理を非同期で実行、その処理が完了したら後MainWindowを表示してやれば良いのではないでしょうか?

追記
すいません、表示中の処理でしたね。
処理を考えないといけないようであればスプラッシュウィンドウは不要だと思いますよ。
たとえば、ViewModelの初期化に時間がかかる等で表示するのがスプラッシュウィンドウだと思うので。

サンプルで書いたコードは以下のような感じです

C#

1public partial class App : Application { 2 [STAThread] 3 public static void Main() { 4 Common.VM = new ViewModel(); 5 var sw = new SplashWindow(); 6 sw.DataContext = Common.VM; 7 sw.ContentRendered += (s, e) => { 8 new Action(async () => { 9 await Common.VM.Load(); 10 sw.Close(); 11 }).Invoke(); 12 }; 13 sw.ShowDialog(); 14 15 16 App app = new App(); 17 app.InitializeComponent(); 18 app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative); 19 app.Run(); 20} 21public class ViewModel : INotifyPropertyChanged { 22 public async Task Load() { 23 await Task.Run(() => { 24 Status = "読み込み1を開始します。"; 25 System.Threading.Thread.Sleep(2000); 26 Status = "読み込み2を開始します。"; 27 System.Threading.Thread.Sleep(5000); 28 Status = "完了しました。"; 29 }); 30 } 3132} 33public class Common { 34 public static ViewModel VM { get; set; } 35}

投稿2016/11/24 22:15

編集2016/11/24 23:00
Hey_CH

総合スコア437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/25 07:20

アプリケーションのアップデートを取りに行く処理を組み込むときに、何も表示せずに放置するのもアレだったのでスプラッシュスクリーンを表示することをひらめいたんです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問