【问题标题】:Webclient's DownloadStringCompleted event handler not firingWebclient 的 DownloadStringCompleted 事件处理程序未触发
【发布时间】:2012-05-09 17:38:34
【问题描述】:

我正在创建一个 Silverlight 仪表板,显示多个设备和网站的状态(启动、关闭等)。我正在尝试使用 WebClient 类连接到网站并查看它是否已启动。但是 DownloadStringCompleted 事件处理程序永远不会被触发。这是与this post 非常相似的问题。

public void LoadPortalStatus(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
{
    List<NetworkPortalStatusModel> pingedItems = new List<NetworkPortalStatusModel>();

    // Add the status for the portal
    BitmapImage bi = IsPortalActive() 
            ? (new BitmapImage(new Uri("led_green_black-100x100.png", UriKind.Relative))) 
            : (new BitmapImage(new Uri("led_red_black-100x100.png", UriKind.Relative)));

    NetworkPortalStatusModel nsm = new NetworkPortalStatusModel
    {
        Unit = "Portal",
        StatusIndicator = new Image { Width = 100, Height = 100, Source = bi }
    };

    pingedItems.Add(nsm);

    // Send back to the UI thread
    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(_delagateSuccess, new object[] { pingedItems });
}

private bool IsPortalActive()
{
    bool IsActive = false;

    WebClient wc = new WebClient();
    wc.DownloadStringCompleted += (s, e) =>
        {
            if (e.Cancelled) 
            {
                _delagateFail(new Exception("WebClient page download cancelled"));
            }
            else if (e.Error != null)
            {
                _delagateFail(e.Error);
            }
            else
            {
                _portalHtmlResponse = e.Result;
                if (_portalHtmlResponse.Contains("Somerville, Ma"))
                {
                    IsActive = true;
                }
            }
        };
    wc.DownloadStringAsync(new Uri("https://portal.nbic.com/monitor.aspx"));

    return IsActive;
}

有人看到这里的问题吗?

【问题讨论】:

    标签: c# .net silverlight webclient


    【解决方案1】:

    您试图将异步方法调用哄骗到同步方法中 - 它不会起作用,因为该方法将在 Web 客户端的完成回调有机会执行之前返回。

    使用 Silverlight,您应该拥抱异步。一种方法是传入一个延续委托,该委托在下载字符串后运行您希望执行的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多