2

wp7用のWebブラウザーアプリには、2つのxamlページがあります。1つはmainpage.xamlで、もう1つはweb.xamlです。mainpage.xamlにyoutubeボタンがあります。クリックすると、web.xamlのyoutube.comに移動します。しかし、YouTubeが完全にナビゲートされた後に(メインページにナビゲートするために)デバイスの戻るボタンを押すと、エラーは発生しません。しかし、YouTubeがナビゲートしているときに戻るボタンを押すと、エラーがスローされます。履歴の記録中にエラーが発生したと思います(履歴を記録するための履歴ページもあります)。エラーは- 「閉じたTextWriterに書き込めません」です。このエラーは、他のサイトでも発生する可能性があります。そのエラーの画像も追加しました。誰かがこれを手伝ってくれますか?よろしくお願いします!

public partial class Web : PhoneApplicationPage
{
    List<Uri> HistoryStack;
    int HistoryStack_Index;
    bool fromHistory;
    bool navigationcancelled = false;
    public IsolatedStorageFile historyFile = null;
    public IsolatedStorageFileStream filestream = null;
    public StreamWriter stream = null;

    public Web()
    {
        InitializeComponent();
        HistoryStack = new List<Uri>();
        historyFile = IsolatedStorageFile.GetUserStoreForApplication();
        if (historyFile.FileExists("History.txt"))
        {
            Error in this line--->filestream = historyFile.OpenFile("History.txt", System.IO.FileMode.Append, FileAccess.Write);--->Error in this line
            stream = new StreamWriter(filestream);
        }
        else
        {
            filestream = historyFile.OpenFile("History.txt", System.IO.FileMode.Create);
            stream = new StreamWriter(filestream);
        }

        HistoryStack_Index = 0;
        fromHistory = false;
        browsers[this.currentIndex].Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(browsers_Navigated);
        browsers[this.currentIndex].Navigating += new EventHandler<NavigatingEventArgs>(browsers_Navigating);
    }

    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedFrom(e);
        {
            stream.Close();
        }
    }

private void browsers_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    { 
        if (!fromHistory)
        {
            if (HistoryStack_Index < HistoryStack.Count)
            {
                HistoryStack.RemoveRange(HistoryStack_Index, HistoryStack.Count - HistoryStack_Index);
            }
            HistoryStack.Add(e.Uri);
                 //HistoryURL temp = new HistoryURL();
                 //temp.URL = e.Uri.ToString();
                 //app.historyList.Add(temp);
                Thread.Sleep(100);
                Dispatcher.BeginInvoke(() =>
                {
                    string title = (string)browsers[this.currentIndex].InvokeScript("eval", "document.title.toString()");
                    stream.WriteLine(title + ";" + e.Uri.ToString());---> **Error in this line.**
                });
            }

            HistoryStack_Index += 1;
        }
        fromHistory = false;
        navigationcancelled = false;
    }

ここに画像の説明を入力してください

4

1 に答える 1

1

私がこれを正しく理解していれば、ナビゲートされたイベント(OnNavigatedFromおよびbrowsers_Navigated)用に2つのハンドラーがあります。

問題はおそらく、OnNavigatedFromあなたが呼び出しstream.Close();ているのでstream.WriteLine、ストリームが閉じられたので次に呼び出されたときに失敗することです。

stream.Close();アプリケーションの終了イベントに移動して、のstream.Flush()後に使用してみてくださいstream.WriteLine

于 2012-06-07T14:19:22.670 に答える