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

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

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

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

WPF

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

Q&A

解決済

1回答

2002閲覧

WPF 親の Freezable とは異なるスレッドに属する DependencyObject を使用することはできません。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

WPF

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

0グッド

0クリップ

投稿2019/08/09 17:15

WPFでスプラッシュスクリーンを作成しました。
このサイトを参考にして下のようなコードをかきました。

public partial class App { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); //initialize the splash screen and set it as the application main window var splashScreen = new SplashScreenWindow(); this.MainWindow = splashScreen; splashScreen.Show(); //in order to ensure the UI stays responsive, we need to //do the work on a different thread Task.Factory.StartNew(() => { //simulate some work being done System.Threading.Thread.Sleep(3000); //since we're not on the UI thread //once we're done we need to use the Dispatcher //to create and show the main window this.Dispatcher.Invoke(() => { //initialize the main window, set it as the application main window //and close the splash screen var mainWindow = new MainWindow(); this.MainWindow = mainWindow; mainWindow.Show(); splashScreen.Close(); }); }); } }

MainwindowにはListViewが存在しています。
ListViewの選択されたアイテムが変わった際のイベントハンドラに下のようにNavigationServiceを利用したページ遷移をおこなっています。
上記のスプラッシュスクリーンを作成してからこのページ遷移時に**親の Freezable とは異なるスレッドに属する DependencyObject を使用することはできません。**とゆうエラーが発生します。
色々調べてみましたが、自己解決できそうにありませんので有識者の方いましたら原因と解決策をご教示ください。

Frame.NavigationService.Navigate(new HomePage());

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/10 02:04

System.Threading.Thread.CurrentThread.ManagedThreadId で、ListViewのアイテムが変わった際のイベントハンドラ内のスレッドIDと遷移先のオブジェクオを生成したスレッドIDが同じことを確認しました。 そのページの説明からも"Freezeメソッド?を呼び出すことで異なるスレッドからのアクセスが可能になることが分かりました。"とありましたのでなぜ現状エラーが出ているか分からない状態です...
Zuishin

2019/08/10 02:28

まだ見比べていませんが、参考にしたサイトでうまくいくのに自分のところでうまくいかないというのは、変えたところに原因があることがほとんどです。 まずはそのサイトを忠実に再現してどうなるか確かめてください。 その結果、成功したならそのコードと成功した旨を、失敗したならそのコードとエラーメッセージを、質問を編集して追記してください。ここではなく。
Gurz1019_MP

2019/08/10 09:19

なんとなくですが、スプラッシュに問題があるわけではないように思います。MainWindowのXAMLと、HomePageクラスが何者かを教えていただけますか?
guest

回答1

0

ベストアンサー

Task.Factory.StartNewを使わずにその中で呼び出しているメソッドを非同期メソッドにしてawaitするとゆう処理に変更したらエラーが発生しなくなりました...なんでかはわかりません、

投稿2019/08/10 03:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問