업데이트해야하는 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);
}
}
답장을 보내 주셔서 감사합니다. 나는 while (! complete) 설정이 이전에 작동했기 때문에 그런 경우는 아니라고 생각합니다. – VARAK
@VARAK - Joao가 옳다고 말하고 싶습니다 - 동일한 코멘트가 UpdateProgressChanged에 적용됩니다 - 메인에서 실행되기를 원합니다. 스레드, 그 동안 단단히 묶는 루프 - http://msdn.microsoft.com/en-us/library/system.deployment.application.applicationdeployment.updateprogresschanged.aspx –
사과, 당신 말이 맞아요. . while 루프를 꺼내서 업데이트합니다. 이전 프로젝트에서 작동했기 때문에 정말 이상합니다 :/고마워요! – VARAK