When my app start I want to show splash screen and create httpwebrequest and when request is finish hide splash screen and show main page.
This is my splash screen:
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);
}
and this is my 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);
}
});
}
}
in constructor MainPage()
....
ShowPopup();
HttpWebRequest movieRequest = (HttpWebRequest)WebRequest.Create(url);
WebRequestState state = new WebRequestState();
state.Request = movieRequest;
movieRequest.BeginGetResponse(new AsyncCallback(HandleWebResponse), state);
WebResponseAvailable += main_WebResponseAvailableEventHandler;
....
Is there a way how can I do what I want? Or that both are in other thread this isn´t possible?
You could create a fake splashScreen by adding a new
SplashScreenPage.xamlpage instead of SpalshScreen.jpg file. If you deleteSplashScreen.jpgfile the first page that should be loaded (from App.xaml) will beSplashScreenPage.xamland there you can perform any operation like webrequest as you pointed out above. Once webrequest ends then do navigate to mainPage.xaml and then callRemoveBackEntrymethod in order to makeMainPage.xamlthe first page entry in the BackStack.Regards,