Tôi có một ứng dụng tải tệp lên máy chủ bằng cách sử dụng webclient. Tôi muốn hiển thị thanh tiến trình trong khi đang tải lên tệp. Tôi sẽ làm thế nào để đạt được điều này?Nhận tiến trình tải lên trong khi tải tệp lên bằng cách sử dụng Webclient.Uploadfile
13
A
Trả lời
18
WebClient.UploadFileAsync sẽ cho phép bạn thực hiện việc này.
WebClient webClient = new WebClient();
webClient.UploadFileAsync(address, fileName);
webClient.UploadProgressChanged += WebClientUploadProgressChanged;
...
void WebClientUploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
Console.WriteLine("Upload {0}% complete. ", e.ProgressPercentage);
}
Lưu ý rằng các chủ đề sẽ không chặn trên Tải lên nữa, vì vậy tôi khuyên bạn nên sử dụng:
webClient.UploadFileCompleted += WebClientUploadCompleted;
...
void WebClientUploadCompleted(object sender, UploadFileCompletedEventArgs e)
{
// The upload is finished, clean up
}
2
Thêm trình xử lý sự kiện của bạn vào WebClient.UploadProgressChanged và gọi WebClient.UploadFileAsync.
Xem tài liệu WebClient.UploadProgressChanged để biết ví dụ.
Cảm ơn. Tôi đang làm việc với đa luồng, việc tải lên tệp đã chạy trên một chuỗi khác. Vậy tôi có nên sử dụng phương thức Uploadfile hoặc phương thức UploadfileAsync không? –
Bạn vẫn cần UploadFileAsync Tôi sợ, chuỗi sẽ chặn cuộc gọi đến UploadFile để những sự kiện đó sẽ không bao giờ được gọi. Bạn có thể tạo lại chặn của riêng mình bằng cách đặt cờ bool khi bạn bắt đầu tải lên, đặt lại nó ở chế độ tải lên hoàn chỉnh, sau đó là luồng .tất cả cho đến khi cờ bị xóa. –
lưu ý: '' 'Sự kiện UploadProgressChanged''' không hoạt động tốt với phương thức' '' UploadDataAsync''' –