我正在使用BackgroundWorker进行一些繁重的工作,以便不影响我的Silverlight UI线程。但是,在DoWork函数中,我遇到了以下异常:
我知道不能从BackgroundWorker访问UI线程,但是这个异常在这一行发生:
UnauthorizedAccessException
"无效的跨线程访问"。我知道不能从BackgroundWorker访问UI线程,但是这个异常在这一行发生:
ListBoxItem insert = new ListBoxItem();
你是如何访问我的UI线程的??
这是我缩小范围后的实际代码段。我基本上正在创建listboxitems,希望将其插入到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();
}
ListBoxItem
进行了一些其他处理,基于内容进行着色,因此我不能简单地创建字符串..但是,我想我会将所需信息打包到KeyValuePair或其他东西中,直到它们被创建。 - David S.