Как загрузить изображение синхронно в фоновом режиме? - PullRequest
3 голосов
/ 25 ноября 2011

У меня есть фоновый работник, который я использую для получения данных с веб-сервера.Требуется также загрузить несколько изображений (png или jpg).Но каждый раз, когда я пытаюсь создать BitmapImage или WriteableBitmap в фоновом рабочем потоке, я получаю недопустимый межпоточный доступ. Можно ли загружать изображение в фоновом режиме, а не в потоке пользовательского интерфейса?

Ответы [ 2 ]

4 голосов
/ 25 ноября 2011

используйте это, это будет работать для вас.

Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    //write here whatever you want to update on screen.
                    textblock.Text = "text changed";
                    // just like this line changed the text of a textblock
                });

, если это не работает, вставьте ваш код.

1 голос
/ 25 ноября 2011

В DoWork методе BackgroundWorker вы не можете получить доступ к элементам управления, созданным в главном потоке, но в этом методе вы можете передать загруженное изображение методу RunWorkerCompleted, потому что это событие запускается в потоке, в котором вы создаете BackgroundWorker ( в большинстве случаев это основной поток).

BackgroundWorker backgroundworker = new BackgroundWorker();
backgroundworker.DoWork += new DoWorkEventHandler(backgroundworker_DoWork);
backgroundworker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundworker_RunWorkerCompleted);


static void backgroundworker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    //download image and make Image class instance
    e.Result = //assign your image here
}

static void backgroundworker_DoWork(object sender, DoWorkEventArgs e)
{
    Image i = (e.Result as Image);
    //assign image to your control
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...