2012-02-19 3 views
1

나는 [wp7 : 2 페이지 [mainpage, secondpage]에 대해 C#에서 응용 프로그램을 작성하고 있습니다.
응용 프로그램이 기본 페이지에서 시작되면 사용자가 두 번째 페이지에서 두 번째 페이지 (NavigationService.Navigate 사용)로 이동할 수 있습니다.wp7의 백그라운드에서 웹에서 파일을 다운로드하십시오.

secondpage WebClient에서 isolatedStorage에 파일을 다운로드합니다.

내 문제는 사용자가 뒤로 키를 사용하여 메인 페이지로 돌아올 때 다운로드가 멈추는 것입니다.

사용자가 자유롭게 페이지를 탐색 할 수 있도록 백그라운드에서 그렇게하는 방법이 있습니까?

다음은 secondpage 클래스의 코드입니다 (click 이벤트에 webClient.OpenReadAsync (uri)가있는 버튼도 있음).

public partial class SecondPage : PhoneApplicationPage 
{ 
    WebClient webClient = new WebClient(); 
    IsolatedStorageFile Storage = IsolatedStorageFile.GetUserStoreForApplication(); 

    public SecondPage() 
    { 
     InitializeComponent(); 
     webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged); 
     webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted); 
    } 
    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
    { 
     try 
     { 
      if (e.Result != null) 
      { 
       string fileName = "download.txt"; 
       IsolatedStorageFileStream f = new IsolatedStorageFileStream(fileName, System.IO.FileMode.Create, Storage); 
       long fileNameLength = (long)e.Result.Length; 
       byte[] byteImage = new byte[fileNameLength]; 
       e.Result.Read(byteImage, 0, byteImage.Length); 
       f.Write(byteImage, 0, byteImage.Length); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

    void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
    { 
     try 
     { 
      if (ProgressDownload.Value <= ProgressDownload.Maximum) 
      { 
       ProgressDownload.Value = (double)e.ProgressPercentage; 
      } 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 

감사

나는이 문제를 가지고있는 경우 BackgroundWorker 클래스와

: 그 호출이 비동기이기 때문에 내가 (코드는 아래에있다) 종료의 bw_doWork의 함수 webClient.OpenReadAsync를 호출 할 때! 그래서 bw는 completeEvent를보고합니다.

private void bw_DoWork(object sender, DoWorkEventArgs e) 
    { 
     BackgroundWorker worker = sender as BackgroundWorker; 

     WebClient webClient = new WebClient(); 
     webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged); 
     webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted); 


     webClient.OpenReadAsync(new Uri("http://foo.com/asd.txt")); 

    } 
+1

BackgroundWorker 클래스는 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.95).aspx –

답변

관련 문제