从txt文件加载URL并在浏览器同步WebClient httpRequest中加载URL

我从微软的这个例子开始使用Windows Phone编程: http : //code.msdn.microsoft.com/wpapps/Hybrid-Web-App-75b7ef74/view/SourceCode

该应用仅显示浏览器并加载URL。

现在我想直接从.txt文件加载其他URL。 例如: http : //www.test.de/appurl.txt然后我想在Windows Phone应用程序中加载URL。 – >例如: http : //anotherserver.de/index.html?mobileApp

我的问题是,URL必须加载同步而不是异步。 我实现了一个AutoResetEvent,但它不起作用……

希望有人可以帮助我,谢谢!

这是我的代码:

public partial class MainPage : PhoneApplicationPage { // URL zur WebApp // TODO: URL muss aus diesem TEXT-File ausgelesen werden! private string _appURL = "http://www.test.de/appurl.txt"; public string _homeURL = ""; //private string _homeURL = "http://anotherserver.de/index.html?mobileApp"; // URL zur Registrierung von Angeboten private string _registrationURL = "http://anotherserver.de/index.html?bereich=registrierung&mobileApp"; // Secondary tile data //private Uri _currentURL; //private Uri _tileImageURL; //private string _pageTitle = "Shop "; // Serialize URL into IsoStorage on deactivation for Fast App Resume private Uri _deactivatedURL; private IsolatedStorageSettings _userSettings = IsolatedStorageSettings.ApplicationSettings; // To indicate when we're navigating to a new page. private ProgressIndicator _progressIndicator; // Constructor public MainPage() { InitializeComponent(); //Read the URL from a txt file and set the _homeURL ReadFile(_appURL); // Setup the progress indicator _progressIndicator = new ProgressIndicator(); _progressIndicator.IsIndeterminate = true; _progressIndicator.IsVisible = false; SystemTray.SetProgressIndicator(this, _progressIndicator); // Event handler for the hardware back key BackKeyPress += MainPage_BackKeyPress; // Fast app resume events PhoneApplicationService.Current.Deactivated += Current_Deactivated; PhoneApplicationService.Current.Closing += Current_Closing; } //AutoResetEvent are = new AutoResetEvent(false); public void ReadFile(string address) { var webClient = new WebClient(); webClient.OpenReadAsync(new Uri(address)); webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted); // lock the thread until web call is completed //are.WaitOne(); //finally call the NotifyComplete method to end the background agent //NotifyComplete(); } void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { try { using (var reader = new StreamReader(e.Result)) { string downloaded = reader.ReadToEnd(); Debug.WriteLine("downloaded= " + downloaded); _homeURL = downloaded; //work = false; } } catch { Debug.WriteLine("Please check your data connection"); MessageBox.Show("Please check your data connection"); } //signals locked thread that can now proceed //are.Set(); } #region App Navigation Events protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); // Browser event handlers Browser.Navigating += Browser_Navigating; Browser.Navigated += Browser_Navigated; Browser.NavigationFailed += Browser_NavigationFailed; Browser.IsScriptEnabled = true; // Try to get the URL stored for fast app resume. try { _deactivatedURL = (Uri)(_userSettings["deactivatedURL"]); } catch (System.Collections.Generic.KeyNotFoundException keyNotFound) { Debug.WriteLine(keyNotFound.Message); } // Were we started from a pinned tile? if (NavigationContext.QueryString.ContainsKey("StartURL")) { // Navigate to the pinned page. Browser.Navigate(new Uri(NavigationContext.QueryString["StartURL"], UriKind.RelativeOrAbsolute)); } else if ((_deactivatedURL != null) && (e.NavigationMode != NavigationMode.Reset)) { // If there is a stored URL from our last // session being deactivated, navigate there if (Browser.Source != _deactivatedURL) { Browser.Navigate(_deactivatedURL); } } else { // Not launched from a pinned tile... // No stored URL from the last time the app was deactivated... // So, just navigate to the home page Browser.Navigate(new Uri(_homeURL, UriKind.RelativeOrAbsolute)); } } .... 

我的问题是,URL必须加载同步而不是异步

不,你不能同步,但使用async/await你可以假装它。

为此,您可以使用类似这样的方法(您甚至可以将其作为扩展方法编写)

 await Navigate(webBrowser1, "http://stackoverflow.com"); DoSomethingAfterNavigationCompleted(); 

 Task Navigate(WebBrowser wb,string url) { var tcs = new TaskCompletionSource(); WebBrowserDocumentCompletedEventHandler documentCompleted = null; documentCompleted = (o, s) => { wb.DocumentCompleted -= documentCompleted; tcs.TrySetResult(null); }; wb.DocumentCompleted += documentCompleted; wb.Navigate(url); return tcs.Task; }