2

在我的 wp7 网络浏览器应用程序中,我有两个 xaml 页面。一个是 mainpage.xaml,另一个是 web.xaml。我在 mainpage.xaml 中有一个 youtube 按钮,如果我点击它,它会导航到 web.xaml 中的 youtube.com。但是,如果我在 youtube 完全导航后按下设备后退按钮(导航到主页),则没有错误。但是,如果我在 youtube 导航时按下后退按钮,则会引发错误。我认为记录历史时出错(我也有历史页面来记录历史)。错误是 - "Cannot write to a closed 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

如果我正确理解这一点,您将拥有 2 个用于导航事件 (OnNavigatedFrombrowsers_Navigated) 的处理程序。

问题可能是在OnNavigatedFrom您调用时,由于流已关闭,stream.Close();因此stream.WriteLine下次调用时将失败。

尝试移动stream.Close();到应用程序关闭事件并使用stream.Flush()after stream.WriteLine

于 2012-06-07T14:19:22.670 回答