0

大家好,

我有许多使用相同导航事件处理程序的 webView,我插入了它们正在导航的 uri,执行 httpwebrequest(添加 cookie),然后在 webview 中设置内容并使用 javascript 添加 css。

但有时我失去了对发件人的引用,我不太明白如何解决这个问题,我不想做 4 导航事件处理程序..

private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {

            wb1.Navigate(new Uri(site + notif, UriKind.Absolute));
            wb2.Navigate(new Uri(site + comptes, UriKind.Absolute));
            wb3.Navigate(new Uri(site + virements, UriKind.Absolute));
            wb4.Navigate(new Uri(site + autres, UriKind.Absolute));

            wb1.Navigating += new EventHandler<NavigatingEventArgs>(wb_Navigating);
            wb2.Navigating += new EventHandler<NavigatingEventArgs>(wb_Navigating);
            wb3.Navigating += new EventHandler<NavigatingEventArgs>(wb_Navigating);
            wb4.Navigating += new EventHandler<NavigatingEventArgs>(wb_Navigating);
        }

        void wb_Navigating(object sender, NavigatingEventArgs e)
        {
            Uri uri = e.Uri;
            e.Cancel = true;

            cookieContainer = new CookieContainer();
            //Add cookies here


            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uri);
            req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
            req.Method = "POST";
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.CookieContainer = cookieContainer;
            req.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), req);
        }

        private void ReadWebRequestCallback(IAsyncResult callbackResult)
        {
            HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);

                using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
                {
                    string results = httpwebStreamReader.ReadToEnd();

                    Deployment.Current.Dispatcher.BeginInvoke(() => OnUiThreadResponse(results));

                }
                myResponse.Close();
        }

        private void OnUiThreadResponse(string results)
        {
            //HERE i need to know which WebBrowser fired the navigating event
            wbi.NavigateToString(results);
            //Add css with JS
            wbi.InvokeScript("");

        }
4

1 回答 1

1

发出请求时,您可以将 传递sender给回调,或者您可以内联回调并通过闭包访问发送者。

于 2012-05-23T09:27:35.753 回答