2011-03-01 7 views
2

업데이트해야하는 ClickOnce 응용 프로그램이 있습니다. ApplicationDeployment.CurrentDeployment.CheckfForDetailedUpdate()을 실행하면 서버에서 사용할 수있는 업데이트가 있으며 서버에 응용 프로그램의 올바른 버전 번호를 얻습니다.ClickOnce 비동기 업데이트가 작동하지 않습니다.

UpdateAsync 메서드를 실행할 때 코드에서와 같이 아무 것도 발생하지 않고 프로그램이 무한 루프 동안 중단됩니다.

무엇이 잘못 될 수 있습니까?

여기

if (ApplicationDeployment.IsNetworkDeployed) 
    if (ApplicationDeployment.CurrentDeployment.CheckForUpdate()) 
    { 
     long downloaded = 0; 
     bool write = false; 
     bool updateCompleted = false; 

     deployment.UpdateCompleted += (sender, e) => updateCompleted = true; 
     deployment.UpdateProgressChanged += (sender, e) => 
     { 
      //used to write to the log file the first time anything downloads 
      if (downloaded == 0) 
       write = true; 

      downloaded = e.BytesCompleted; 
     }; 

     deployment.UpdateAsync(); 

     //suspend while updating 
     while (!updateCompleted) 
     { 
      //write is never true implying that nothing gets downloaded 
      if (write) 
      { 
       log.Info(
        "Downloaded " + downloaded + " bytes of " + total + "."); 
       write = false; 
      } 
      Thread.Sleep(10); 
     } 
    } 

답변

1

내 생각 엔 당신이 while 루프의 기본 응용 프로그램 스레드를 차단하고하고 UpdateCompleted 그것을 실행할 수 있도록 유휴되기 위해 주 응용 프로그램 스레드를 기다리고 있다는 것입니다 코드입니다. 비동기 업데이트를 완료하거나 예외를 발견하면

이 ClickOnce를가 기본 응용 프로그램 스레드에 UpdateCompleted 이벤트를 발생합니다 :이 추측은한다고 MSDN 문서에 의해 지원됩니다.

+0

답장을 보내 주셔서 감사합니다. 나는 while (! complete) 설정이 이전에 작동했기 때문에 그런 경우는 아니라고 생각합니다. – VARAK

+0

@VARAK - Joao가 옳다고 말하고 싶습니다 - 동일한 코멘트가 UpdateProgressChanged에 적용됩니다 - 메인에서 실행되기를 원합니다. 스레드, 그 동안 단단히 묶는 루프 - http://msdn.microsoft.com/en-us/library/system.deployment.application.applicationdeployment.updateprogresschanged.aspx –

+0

사과, 당신 말이 맞아요. . while 루프를 꺼내서 업데이트합니다. 이전 프로젝트에서 작동했기 때문에 정말 이상합니다 :/고마워요! – VARAK

관련 문제