콘솔 응용 프로그램에서 작동하는 파일을 다운로드하는 클래스가 있으며 이제는 webapi 프로젝트에서이 파일을 사용하고 싶습니다. ApiController의 WebClient.DownloadFileAsync가 이벤트를 트리거하지 않습니다.
내가하지만 아닌 ApiController 내부, 콘솔 프로그램에서 작동WebClient wc = new WebClient();
bool downloadFinished = false;
wc.DownloadProgressChanged += (s, e) =>
{
ProgressChanged(e.BytesReceived, e.TotalBytesToReceive, e.ProgressPercentage);
};
wc.DownloadFileCompleted += (s, e) =>
{
downloadFinished = true;
};
wc.DownloadFileAsync(new Uri(fileUrl), Path.Combine(DOWNLOADFOLDERTEMP, FileName));
while (!downloadFinished)
{
System.Threading.Thread.Sleep(250);
}
을 사용하여 파일을 다운로드합니다. 파일을 다운로드하지만 진행 및 완료된 이벤트는 결코 트리거되지 않으므로 무한 루프가 발생합니다.
ApiController에서 호출 될 때 WebClient 트리거 이벤트를 어떻게 만듭니 까?
WebClient 동기식 DownloadFile은 진행 상황을보고하지 않기 때문에 DownloadFileAsync를 사용하고 있습니다. – elch
@elch 알겠습니다. 그런 다음 폴링 루프를 없애고 이벤트를 사용하거나 TaskCompletionSource로 기다려야합니다. – usr
이벤트를 사용하면 동일한 교착 상태 문제가 발생합니다. WebClient를 호출하여 동기화 컨텍스트를 억제하면이를 해결할 수 있습니다. 이와 같은 문제는 없지만 비동기 코드는 침입 적입니다. – usr