Получение «UnauthorizedAccessException» в BackgroundWorker без доступа к потоку пользовательского интерфейса - PullRequest
5 голосов
/ 01 марта 2012

Я много работаю с фоновым мастером, чтобы это не повлияло на мой поток пользовательского интерфейса Silverlight.Однако в функции DoWork я получаю следующее исключение:

UnauthorizedAccessException «Недопустимый доступ между потоками».

Я знаю, что не могу получить доступ к потоку пользовательского интерфейса из BackgroundWorker,Тем не менее, это исключение возникает в этой строке:

  ListBoxItem insert = new ListBoxItem();

Как это получить доступ к моему потоку пользовательского интерфейса ??

Вот фактический кусок кода, к которому я его сузил.Я в основном делаю работу по созданию списков элементов, которые я хотел бы вставить в список sourceList:

void FillSourceList()
{
    busyIndicator.IsBusy = true;
    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += (sender, args) =>
        {
            List<ListBoxItem> x = new List<ListBoxItem>();
            for (int i = 0; i < 25; i++ )
            {
                ListBoxItem insert = new ListBoxItem(); //<---Getting exception here
                insert.Content = "whatever";
                x.Add(insert);
            }
            args.Result = x;
        };
    bw.RunWorkerCompleted += (sender, args) =>
        {
            foreach (ListBoxItem insert in (List<ListBoxItem>)(args.Result))
                sourceList.Items.Add(insert);
            busyIndicator.IsBusy = false;
        };

    bw.RunWorkerAsync();
}

1 Ответ

4 голосов
/ 01 марта 2012

A ListBoxitem происходит от Control, поэтому считается частью GUI. Я бы ожидал, что «отдельный» элемент тоже будет в порядке в потоке, но, очевидно, это не так.

Очевидное решение: создать список x содержимого (строк) и отложить создание элементов до события Completed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...