0

ファイルをisolatestorageに保存しようとしたときにネットワーク接続がない場合、ユーザーにエラーメッセージを表示してアプリのクラッシュを防ぎたいです。ビルド時にエラーは発生しませんが、ファイルを保存しようとするとクラッシュします。

 private void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        LongListSelector selector = sender as LongListSelector;

        // verifying our sender is actually a LongListSelector
        if (selector == null)
            return;

        SoundData data = selector.SelectedItem as SoundData;

        // verifying our sender is actually SoundData
        if (data == null)
            return;


        if (data.IsDownloaded)
        {
            if (audioStream != null)
            {
                audioStream.Close();
                audioStream.Dispose();
            }

            audioStream = IsolatedStorageFile.GetUserStoreForApplication().OpenFile(data.SavePath, FileMode.Open, FileAccess.Read, FileShare.Read);

            AudioPlayer.SetSource(audioStream);
            AudioPlayer.Play();

        }
        else
        {

            WebClient client = new WebClient();
            client.OpenReadCompleted += (senderClient, args) =>
            {
                using (IsolatedStorageFileStream fileStream = IsolatedStorageFile.GetUserStoreForApplication().CreateFile(data.SavePath))
                {
                    if (args == null || args.Cancelled || args.Error != null)
                    {
                        MessageBox.Show("Please check your network/cellular connection. If you have a network connection, verify that you can reach drobox.com");
                        return;
                    }

                    args.Result.Seek(0, SeekOrigin.Begin);
                    args.Result.CopyTo(fileStream);
                    AudioPlayer.SetSource(fileStream);
                    AudioPlayer.Play();


                }
            };
            client.OpenReadAsync(new Uri(data.FilePath));

        }
4

1 に答える 1

2

パラメータを使用する前に確認してみてはいかがでしょうか。

using (IsolatedStorageFileStream fileStream = IsolatedStorageFile.GetUserStoreForApplication().CreateFile(data.SavePath))
{                    
    if (args == null || args.Cancelled || args.Error != null)
    {
        MessageBox.Show("No connection");
        return;
    }

    args.Result.Seek(0, SeekOrigin.Begin);
    args.Result.CopyTo(fileStream);
    AudioPlayer.SetSource(fileStream);
    AudioPlayer.Play();
}

またはuser574632が言ったように、すべてをtry/catchでラップします。これにより、アプリケーション全体をクラッシュさせることなく、catch ブロックに入れたエラーをユーザーが確認できるように、適切に失敗することができます。

于 2014-06-28T23:30:33.477 に答える