0

當我的應用程序啓動時,我想顯示啓動畫面並創建httpwebrequest,並在請求完成時隱藏啓動畫面並顯示主頁面。完成Web請求後顯示啓動畫面並隱藏

這是我的啓動畫面:

private void ShowPopup() 
    { 
     this.popup = new Popup(); 
     this.popup.Child = new PopupSplash(); 
     this.popup.IsOpen = true; 
     StartLoadingData(); 
    } 

    private void StartLoadingData() 
    { 
     backgroundWorker = new BackgroundWorker(); 
     backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork); 
     backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted); 
     backgroundWorker.RunWorkerAsync(); 
    } 

    void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     this.Dispatcher.BeginInvoke(() => 
      { 
       this.popup.IsOpen = false; 
      } 
     ); 
    } 

    void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 

     using (var db = new ListDataContext(ListDataContext.DBConnectionString)) 
     { 
      if (!db.DatabaseExists()) 
      { 
       db.CreateDatabase(); 
      } 
     } 
     Thread.Sleep(4000); 
    } 

,這是我的HttpWebRequest:

private void main_WebResponseAvailableEventHandler(object sender, string response, string url) 
    { 
      SearchResult result = new SearchResult(response, url); 

      PhoneApplicationService.Current.State["result"] = result; 
      this.NavigationService.Navigate(new Uri("/SearchPivotPage.xaml", UriKind.Relative)); 
    } 

    private void HandleWebResponse(IAsyncResult asyncResult) 
    { 
     WebRequestState state = (WebRequestState)asyncResult.AsyncState; 
     HttpWebRequest request = state.Request; 
     string url = request.RequestUri.ToString(); 
     state.Response = (HttpWebResponse)request.EndGetResponse(asyncResult); 

     if (state.Response != null) 
     { 
      StreamReader reader = new StreamReader(state.Response.GetResponseStream()); 
      StringBuilder sb = new StringBuilder(); 
      while (!reader.EndOfStream) 
       sb.Append(reader.ReadLine()); 
      string text = sb.ToString(); 
      Dispatcher.BeginInvoke(() => 
      { 
       if (WebResponseAvailable != null) 
       { 
        WebResponseAvailable(this, text, url); 
       } 
      }); 
     } 
    } 

在構造函數中的MainPage()

 .... 
     ShowPopup(); 
     HttpWebRequest movieRequest = (HttpWebRequest)WebRequest.Create(url); 
     WebRequestState state = new WebRequestState(); 
     state.Request = movieRequest; 
     movieRequest.BeginGetResponse(new AsyncCallback(HandleWebResponse), state); 
     WebResponseAvailable += main_WebResponseAvailableEventHandler; 
     .... 

有沒有一種方法,我該怎麼辦我想要的是?或者說這兩者都在其他線程中,這是不可能的?

回答

1

您可以通過添加新的SplashScreenPage.xaml頁面而不是SpalshScreen.jpg文件來創建假splashScreen。如果您刪除SplashScreen.jpg文件,則應該加載的第一頁(來自App.xaml)將爲SplashScreenPage.xaml,您可以像上面指出的那樣執行任何操作,如webrequest。一旦webrequest結束,然後導航到mainPage.xaml,然後調用RemoveBackEntry方法以使MainPage.xaml成爲BackStack中的第一個頁面條目。

Regards,