Windows Phone C#, UnauthorizedAccessException при создании BitmapImage
Я пытаюсь загрузить изображение из Интернета, используя асинхронный вызов, например:
private void DoGetAlbumart(object sender, DoWorkEventArgs e)
{
string req = (string)e.Argument;
WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(ReadWebRequestCallback);
wc.OpenReadAsync(new Uri(req));
}
void ReadWebRequestCallback( object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null && !e.Cancelled)
{
try
{
BitmapImage image = new BitmapImage();
image.SetSource(e.Result);
SecondTile.Source = image;
}
catch (Exception ex)
{
}
}
else
{
}
}
Кажется, что когда точка останова достигает BitmapImage image = new BitmapImage(), я получил следующее исключение:
ex = {System.UnauthorizedAccessException: недопустимый межпоточный доступ. в MS.Internal.XcpImports.CheckThread() в System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex, IntPtr constructDO) в System.Windows.Media.Imaging.BitmapImage..ctor()
Что еще я могу попытаться избавиться от этой ошибки?
1 ответ
Методы обратного вызова выполняются в фоновых потоках, а не в потоке пользовательского интерфейса. К несчастью, BitmapImage
s может быть создан только в потоке пользовательского интерфейса. Если вам нужен доступ к потоку пользовательского интерфейса из обратного вызова, попробуйте следующее:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
BitmapImage image = new BitmapImage();
image.SetSource(e.Result);
SecondTile.Source = image;
});