Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Silverlight. DownloadStringAsync


Автор: ad12 19.4.2012, 18:05
Добрый день.
Silverlight 4.
Исполняю приложение в режиме отладки (на временном локальном хосте, созданном Visual Studio)

Пытаюсь загрузить ресурс в виде строки:
 
Код

WebClient client = new WebClient();
client.DownloadStringCompleted += client_DownloadStringCompleted;
client.DownloadStringAsync(new Uri("http://www.yandex.ru"));


По завершении загрузки хочу отобразить его в текстбоксе:

Код

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            try
            {
                myTextBox.Text = e.Result; //здесь вылезает исключение
                                                         //InnerException.--->System.Security.SecurityException. Ошибка безопасности  
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());                
            }
        }


Как с этим побороться?

Автор: erm0l0v 20.4.2012, 11:21
используйте Dispatcher для доступа к элементам пользовательского интерфейса из потока.

Автор: ad12 20.4.2012, 13:39
Спасибо.
А можно чуть подробнее?
Если бы чуток кода...

Автор: dextermd 21.4.2012, 17:21
На WPF это делается следующим образом:
Код

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    try
    {
        Action action = () => myTextBox.Text = e.Result;
        Dispatcher.Invoke(action);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

Наверное на Silverlight будет работать аналогично.

Автор: ad12 23.4.2012, 14:07
Спасибо.
Но и это не работает.
e.Result вызывает аналогичное исключение :-(

Получается, из браузерного Silverlight-приложения нельзя обращаться к внешнему ресурсу...

Автор: Любитель 13.5.2012, 12:29
Для WebClient в сильверлайте применяются полтики кросдоменности. Если нету clientaccesspolicy.cxml (ну там ещё фолбек на crossdomain.xml), разрешающего доступ - будет security exception. Если нужно запросить сервис не зависящий от тебя - делай это на своём сервер сайде, а из-под SL вызывай свой сервис.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)