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

2024-01-29

我正在为 Windows Phone 7 编写一个 Silverlight 应用程序,其中有一个类需要向WebClient.DownloadStringAsync http://msdn.microsoft.com/en-us/library/ms144202%28v=VS.95%29.aspx()

我是否最好为每个请求创建一个新的 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我每次都会创建一个新的。我还会使用 lambda 表达式DownloadStringCompleted事件,因为这将使您能够将所有相关逻辑放在一起。
e.g.:

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

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

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

请注意,WebClient自动将已完成的事件编组回 UI 线程,因此您在那里执行的任何工作都会阻塞该 UI 线程。如果您完成的事件除了简单更新 UI 之外还执行其他操作,请使用HttpWebRequest出于性能和可用性问题,建议改为使用。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否应该在 Silverlight 中重用 WebClient 实例 的相关文章

随机推荐

  • 找不到 javafx.controls JavaFX 11 / JDK 11.0.1 [重复]

    这个问题在这里已经有答案了 我正在使用 IntelliJ 我已经尝试过所有其他似乎对其他人都有效的解决方案 我收到一个错误 Caused by java lang IllegalAccessError class com sun javaf
  • 使用泛型参数关闭

    我在将以下函数编写为闭包时遇到问题 func myfunc
  • 删除 VSCode PHP 调试中的字符限制

    在 PHP 中进行调试并使用左侧的变量窗格时 将鼠标悬停在该变量 对象上时可以看到的字符数是有限的 无论如何 是否可以查看该变量的完整有效负载或除了必须使用之外的任何解决方法file put contents每次我想看到一个大的变量值 将变
  • jQuery data() 返回未定义,attr() 返回整数

    我有以下代码 alert embellishment data embellishmentId alert embellishment attr data embellishmentId 第一个警报返回undefined 而第二个警报返回一
  • 如何在 Perl 中异步运行系统命令?

    我目前有一个 Perl 脚本 它在系统上运行外部命令 收集输出 并根据返回的内容执行一些操作 现在 这是我运行它的方式 其中 cmd 是带有命令设置的字符串 output cmd 我想更改此设置 以便如果命令挂起并且在很长时间后没有返回值
  • Lucene 模糊搜索客户名称和部分地址

    我浏览了所有现有的问题帖子 但找不到相关的内容 我有数百万条记录 包括个人名字 姓氏 地址 1 地址 2 国家 地区代码 出生日期 我想每天使用上述文件检查我的客户列表 我的客户列表也会每天更新 并且文件也每天更新 对于名字和姓氏 我想要模
  • 点击 iPhone 上的文本输入字段会弹出键盘,但打字不会输入任何文本

    我正在努力使页面更具响应性 为此 我试图确保网页在移动设备上的外观和功能符合预期 在桌面上 它按预期工作 在 iPhone 上 它看起来与预期一致 但无法按预期工作 如果您选择输入字段 它将聚焦并调出键盘 但是它不会让您输入任何内容 如果您
  • NSFetchRequest 和 predicateWithBlock

    我正在使用一个使用 Core Data 和 NSManagedObjects 来填充 UITableView 的应用程序 我的应用程序中只有一个类 称为Event 我创建了以下自定义实例方法Event BOOL isExpired retu
  • 如何从控制台应用程序中的 config.json 读取值

    我刚刚安装了 ASP NET 5 并在 Visual Studio 中创建了一个控制台应用程序 我已将文件 config json 添加到项目的根文件夹中 它看起来像这样 Data TargetFolderLocations TestFol
  • 在Python中检索所有Cookie

    如何在不知道名称的情况下用 Python 读回所有 cookie 不确定这是否是您正在寻找的内容 但这是一个简单的示例 您将 cookie 放入 cookiejar 中并读回它们 from urllib2 import Request bu
  • 无法解析主机:bitbucket.org;提供节点名或服务名,或未知

    每次我尝试使用终端从 Bitbucket 克隆任何存储库时 都会出现此错误 git clone https email protected cdn cgi l email protection me myrepo git Cloning i
  • 姜戈。如何保存用 Pillow 编辑的内容文件

    我正在尝试保存下载的图像requests然后编辑Pillow to ImageField在一个模型中 但物体是在没有图像的情况下被创建的 这就是我所拥有的 设置 py MEDIA ROOT BASE DIR media MEDIA URL
  • NameError(未初始化常量 Unzipper::Zip),但仅限于 Heroku 部署 (Rails)

    我有课unzipper rb使用 Rubyzip 解压缩文件 在我的本地环境中 我可以成功解压缩文件 而无需使用显式包含依赖项require zip 不过在 Heroku 上 我得到了NameError uninitialized cons
  • 无形状:从副产品映射到不同的副产品

    在下面 我尝试创建一个多态函数来转换RawFeatureValue into a RefinedFeatureValue import shapeless object test type RawFeatureValue Int Doubl
  • 使用 Series 更新 DataFrame 中的列

    我有一个DataFrame对象在pandas具有多个行和列 出于说明目的 假设我有两个这样的列 名为Address and Age 我也有一个Series将多个地址映射到年龄的对象 现在 我想使用该系列更新数据框 这是我目前的做法 for
  • 正则表达式从字符串中删除开始和结束字符?

    假设我有一个像这样的字符串 file widget widget newsletter php 我想使用 preg replace 删除前缀widget 并删除后缀 php 是否可以使用一个正则表达式来实现这一切 结果字符串应该是widge
  • 如何在 GHCi 重新加载之间保留环境?

    基本上当我 load name hs变量和绑定都消失了 有没有什么选项可以告诉 ghci 保留一切 要加载新模块 您可以使用 Prelude gt m Mymodule 但重新加载并保持交互式绑定通常是不可能的 重新加载本质上是忘记所有模块
  • 为什么必须在 Service Worker 中克隆 fetch 请求?

    在 Google 的 Service Worker 示例之一中 缓存并返回请求 https developers google com web fundamentals getting started primers service wor
  • SQL连接,获取多个同名列

    我有一张带有一列的表ID and SERVICE TYPE TEXT 以及另一个包含列的表 ID SERVICE TYPE 以及许多其他专栏 The SERVICE TYPE第二个表中包含ID从第一张表开始 我想查询 这样我就可以得到SER
  • 是否应该在 Silverlight 中重用 WebClient 实例

    我正在为 Windows Phone 7 编写一个 Silverlight 应用程序 其中有一个类需要向WebClient DownloadStringAsync http msdn microsoft com en us library