c# - 是否应该在 Silverlight 中重用 WebClient 实例

标签 c# silverlight windows-phone-7

我正在为 Windows Phone 7 编写一个 Silverlight 应用程序,它有一个类需要向 WebClient.DownloadStringAsync 发出多个请求()

我是更好地为每个请求创建一个新的 WebClient 实例,还是在一个字段中初始化单个实例并为每个请求使用它更有效(确保在任何时候只有一个请求处于事件状态) ?

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
}

最佳答案

如果您使用的是 WebClient,我会每次都创建一个新的。我还会为 DownloadStringCompleted 事件使用 lambda 表达式,因为这将使您能够将所有相关逻辑放在一起。
例如:

var wc = new WebClient();
wc.DownloadStringCompleted += (sender, e) => { GetServiceResources(); };
wc.DownloadStringAsync(new Uri("http://example.com/path", UriKind.Absolute));

这应该使代码更易于阅读和维护。

因为您的 smaple 代码也有嵌套的网络请求(完成的事件启动另一个请求),重复使用同一个客户端可能会使调试更加困难。

请注意,WebClient 会自动将完成的事件编码回 UI 线程,因此您在那里所做的任何工作都会阻塞该 UI 线程。如果您完成的事件除了对 UI 进行简单更新之外还执行任何操作,建议使用 HttpWebRequest 来解决性能和可用性问题。

如果您可以并行运行它们或(甚至更好)将逻辑(和响应)组合到单个请求中,我还建议不要发出连续的 Web 请求。

关于c# - 是否应该在 Silverlight 中重用 WebClient 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444851/

相关文章:

c# - 文本框滞后于大量数据? (银光 4)

银光复调音乐

c# - 在 DDD 架构中,我应该在哪里放置与按角色用户过滤数据相关的查询逻辑

c# - 如何使用 LINQ 查询选择静态文本?

银光/WP7 : programmatically change the button background image

windows-phone-7 - 在 Windows Phone 7 中显示相机输出

c# - 如何从 Windows Phone 7 中的 DateTime 中减去一秒?

c# - 在 WP7 应用程序中使用 .GIF 动画作为启动画面

c# - 在 DBQuery 中按匿名类型排序

c# - 使用 Razor 将禁用属性添加到按钮