저는 실버 라이트에 익숙하지 않고 비동기식 파일 다운로드 만 가능하다는 사실에 매우 놀랐습니다. 글쎄, 난이 내 간단한 코드입니다 .. 단지 플래그를 설정하고 변경할 수 기다리고에 의해 을이 행동에 대응하기 위해 시도했습니다블로킹/동기 방식으로 파일을 다운로드하는 방법은 무엇입니까?
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged +=
new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
webClient.OpenReadAsync(new Uri("/trunk/internal/SilverLightInterface.ashx?xxid=XXX", UriKind.Relative));
while (XmlStateStream == null) { }
lblProgress.Content = "Done Loading";
}
void webClient_DownloadProgressChanged(object sender,
DownloadProgressChangedEventArgs e) {
lblProgress.Content = "Downloading " + e.ProgressPercentage + "%";
}
volatile Stream XmlStateStream = null;
void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null)
{
lblProgress.Content = "Error: " + e.Error.Message;
return;
}
XmlStateStream = e.Result;
}
이 실제로 때 매우 성가신 인 (동결 파이어 폭스를 일으키는 내가 개발 중에 다른 일을하고있다.) (btw, 파이어 폭스의 명성 때문에 테스트 해 보았고 파이어 폭스는 얼어 버렸지 만 복원 후 여기서 입력 한 내용을 잃지 않았다.) while(XmlStateStream==null){}
은 왜 그런지 모르겠다. 얼어 붙었다. 자물쇠 또는 휘발성 (내가 이미 가지고있는 것을 제외하고)을위한 속성이 있습니까? 아니면 Silverlight 페이지 수명주기 또는 다른 부분에 있습니까?
저는 이것이 왜 작동하지 않는지에 대해 정말로 혼란 스럽습니다.
또한,이, 3.0
(. 즉, 실버) 이벤트 중심의 UI에 프로그래밍 당신은 항상 대체 비동기 방법을 사용한다 :
여기에 전체 코드입니다. 동기식으로이 작업을 수행해야하는 이유는 무엇입니까? –