前提・実現したいこと
UWP初心者です
現在Visual Studio 2017でUWPアプリを作成し
その一つの機能で
アプリ終了のボタンを押下すると、
C#
1Application.Current.Exit();
でアプリを終了する機能を実装しています。
現在端末(Panasonic製 FZ-M1)にアプリをインストールし使用しており、
基本的にはこれでアプリを終了することができるのですが、
まれにアプリ終了実行時に、
画面が作成したロゴのタイルの背景に指定した色の状態になり、
アプリのウィンドウが閉じずに残ってそのままになる場合があります。
この状態になると、
端末のWindowマークのタップやエッジスワイプなどの
操作ができなくなってしまうのですが、
アプリが何かOSに影響を与えているのでしょうか?
アプリ中で非同期でMediaPlayerを複数いっきに開いたり、
Frame.Navigate()による画面遷移とMediaPlayerによる音声ファイル再生(それに伴う画面の表示変更)
を一連で行ったりしてるんですが、
そのあたりの処理がCPUに負荷をかけたりしているのでしょうか?
このようなサイトでの質問も初めてなので、情報不足ありましたら
ご指摘ください。
宜しくお願い致します。
該当のソースコード
アプリ内で音声ファイルの再生時間を取得しています。
C#
1 public sealed partial class PlayerPage : Page 2 { 3 private readonly MediaPlayer _mediaPlayer = new MediaPlayer(); 4 private MediaSource _mediaSource = null; 5 6 public PlayerPage() 7 { 8 this.InitializeComponent(); 9 } 10 11 protected override void OnNavigatedTo(NavigationEventArgs e) 12 { 13 string fileName = (string)e.Parameter; 14 SoundPlay(fileName); 15 } 16 17 private async Task<string> GetPlayTime(string fileName) 18 { 19 TimeSpan time = await GetDuration(fileName); 20 return time.ToString(@"mm\:ss"); 21 } 22 23 private async Task<TimeSpan> GetDuration(string fileName) 24 { 25 StorageFile outfile = await File.GetWavFileAsync(fileName); //対象の音声ファイルでStorageFileを取得する 26 27 MediaPlayer mp = new MediaPlayer(); 28 MediaSource ms = MediaSource.CreateFromStorageFile(outfile); 29 MediaPlayer mp.Source = ms; 30 31 await Task.Delay(1000); 32 TimeSpan t = ((TimeSpan)ms.Duration); 33 34 mp.Dispose(); 35 ms.Dispose(); 36 37 return t; 38 } 39 40 private void SoundPlay(string fileName) 41 { 42 StorageFile outfile = await FilePath.GetWavFileAsync(fileName); 43 44 _mediaSource?.Dispose(); 45 _mediaSource = MediaSource.CreateFromStorageFile(outfile); 46 _mediaPlayer.Source = _mediaSource; 47 48 _mediaPlayer.Play(); 49 } 50 }
試したこと
・タスクマネージャーの確認
上記現象が起こった時、タスクマネージャーのプロセスを確認してもアプリは動いてなかった。
※現象発生後、すぐにタスクマネージャーを確認すると、1瞬だけCPU使用率が100%になっておりました。(すぐに下降)
・イベントビューアーの確認
上記現象が起こった時、イベントログを確認すると、igfxCUIService2.0.0.0が大量に常に出力されていた。
・非同期で再生時間大量読込
下記のようなメソッドを作って実行したが、特に上記のような現象は発生せず
C#
1 private async Task DangerMethod1(string fileName) 2 { 3 int retryCount = 50; 4 for (int i = 0; i < retryCount; i++) 5 { 6 GetDuration(fileName); 7 } 8 }
・連続画面遷移
下記のようなメソッドを作って実行したが、特に上記のような現象は発生せず
C#
1 private void DangerMethod2() 2 { 3 int retryCount = 20; 4 for (int i = 0; i <= retryCount; i++) 5 { 6 if (Frame.CanGoBack) 7 { 8 Frame.GoBack(); 9 } 10 11 Frame.Navigate(typeof(PlayerPage)); 12 } 13 14 }
・デバッグ時の挙動
Application.Current.Exit()の代わりに
ApplicationView.GetForCurrentView().TryConsolidateAsync();
使用すると教えていただいた後、
動作を確認すると、
同現象(タスクバー点滅)が起こった後、
アプリを終了すると、
ロゴのタイルの背景で留まる状態にはなりませんでしたが、
かわりにアプリはそのままの状態で終了しなくなりました。
その時、デバッグ実行停止にすると、
Application.Current.Exit()時と同じく
ロゴのタイルの背景で留まる状態になりました
補足情報(FW/ツールのバージョンなど)
上記の現象はまれにしか発生しないんですが、
発生前はだいたい画面下部に表示されている
タスクバー全体がちかちかと点滅いたします。
まだ数回しか再現しておりませんが、
このタスクバーちかちかが発生した時は、
だいたい上記のPlayerPageに遷移した際に発生しております。
OS バージョン Windows10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/03 02:25
2020/09/04 04:17 編集
2020/09/04 06:11
2020/09/04 09:22