Tôi đang viết một ứng dụng Silverlight cho Windows Phone 7 trong đó có một lớp mà cần phải tạo nhiều yêu cầu để WebClient.DownloadStringAsync()nên WebClient trường hợp được tái sử dụng trong Silverlight
Tôi có khấm khá hơn tạo ra một thể hiện mới của WebClient cho mỗi yêu cầu, hoặc là hiệu quả hơn để khởi tạo một cá thể đơn lẻ trong một trường và sử dụng nó cho mỗi yêu cầu (đảm bảo chỉ có một yêu cầu hoạt động tại một thời điểm)?
public class MainViewModel : INotifyPropertyChanged
{
private readonly WebClient _wc;
public MainViewModel()
{
_wc = new WebClient
{
Credentials = new NetworkCredential("yyyyyyy", @"xxxxxx")
};
}
readonly Uri _baseUrl = new Uri(@"https://some.web.url");
public void GetServices()
{
_wc.DownloadStringCompleted += GetServicesCompleted;
var uri = new Uri(_baseUrl, "/path");
_wc.DownloadStringAsync(uri);
}
private void GetServicesCompleted(object sender, DownloadStringCompletedEventArgs e)
{
_wc.DownloadStringCompleted -= GetServicesCompleted;
string result = e.Result;
// other logic...
GetServiceResources();
}
private void GetServiceResources()
{
_wc.DownloadStringCompleted += GetServicesResourcesDownloaded;
var url = new Uri(_baseUrl, "/path2");
_wc.DownloadStringAsync(url);
}
// etc
}
Tôi biết những gì bạn đang nói về liên quan đến các proxy WCF gắt gỏng có thể xâm nhập vào! Sẽ rất thú vị nếu biết nó tương tự với WebClient của Silverlight. –
@BFree đã xóa câu trả lời của mình, nhưng chỉ để lặp lại rằng không có phương thức Dispose() trong lớp WebClient của Silverlight, vì vậy việc sử dụng các khối không có liên quan ở đây. –
Tuy nhiên, như một sở thích cá nhân, tôi muốn thêm em nếu nó dễ làm như vậy hoặc ghi lại sự xuất hiện đầu tiên - đó là thói quen tốt để luôn loại bỏ bất cứ thứ gì 'IDisposable'; và nó không có hại gì cả cho WebClient. –