[C#] - Simple Update Manager (Http 프로토콜 통한 다운로드 : WebClient, DownloadFileAsync)
C# 2008. 3. 13. 17:03 |HTTP 프로토콜을 사용해서 원격파일 다운로드 프로그램 만들고 있습니다.
HTTP 를 통해서 파일을 받을때는 WebClient 를 사용하고 있다.
단순하게 다운로드 받기 위해서는 아래와 같이 DownloadFile()를 사용한다.
webclient.DownloadFile(updatelistUrl, updatelistTxt);
그리고 다운로드 받는 상태를 알기 위해서는 DownloadFile 가 아닌 DownloadFileAsync 를 사용해야 한다.
그리고 받는 동안 호출되는 이벤트 함수와 다 받은후 처리 하는 함수를 등록해야 한다.
// 객체 생성
WebClient client = new WebClient();
// 이벤트 함수 등록
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
// 받는 동안 프로그래스바의 Value에 추가한다. (퍼센트 값이 바로 제공된다.)
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressfile.Value = e.ProgressPercentage;
}
//
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
…
}
파일을 실제로 다운로드 받을때는 아래와 같이 처리 합니다.
(DownloadFileAsync 이것을 사용해야 이벤트 함수가 호출 됩니다.)
스레드로 해도 될 듯 한데 우선 작업 하기 편하게 타이머를 사용해서 제작 하였습니다.
Test 버튼을 누르면 해당 동작이 시작 됩니다.
[동작 순서]
- Updatelist.txt 파일을 다운로드 한다.
- Updatelist.txt 파일의 정보를 분석해서 다운로드할 파일을 구성한다.
- 해당 파일을 타이머를 통해서 다 받을 때 까지 반복한다.
- 다 받으면 자동 종료 또는 특정 실행 파일을 실행한다.