0

複数のデバイスと Web サイトのステータス (アップ、ダウンなど) を表示する Silverlight ダッシュボードを作成しています。WebClient クラスを使用して Web サイトに接続し、それが稼働しているかどうかを確認しようとしています。ただし、DownloadStringCompleted イベント ハンドラーは起動されません。これは、この投稿と非常によく似た問題です。

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;
}

誰かがここで問題を見ていますか?

4

1 に答える 1

0

非同期メソッド呼び出しを同期メソッドに誘導しようとしています - Web クライアントの完了コールバックが実行される前にメソッドが返されるため、機能しません。

Silverlight では、非同期を採用する必要があります。これを行う 1 つの方法は、文字列がダウンロードされた後に実行するコードを実行する継続デリゲートを渡すことです。

于 2012-05-09T19:57:47.743 に答える