得到";UnauthorizedAccessException”;在BackgroundWorker中,而不访问

本文关键字:BackgroundWorker 访问 quot UnauthorizedAccessException 得到 | 更新日期: 2023-09-27 18:26:11

我正在做一些繁重的后台工作,这样就不会影响我的Silverlight UI线程。然而,在DoWork函数中,我得到了这个异常:

UnauthorizedAccessException"无效的跨线程访问"。

我知道我不能从BackgroundWorker访问UI线程,但是,这个异常发生在这一行:

  ListBoxItem insert = new ListBoxItem();

那是怎么访问我的ui线程的??

这是我将其缩小到的实际代码段。我基本上是在创建列表项,我想将其插入到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();
}

得到";UnauthorizedAccessException”;在BackgroundWorker中,而不访问

ListBoxitem源自Control,因此它被视为GUI的一部分。我本以为线程中的"分离"项也可以,但显然不是。

显而易见的解决方案是:建立一个内容(字符串)的列表x,并将Items的创建延迟到Completed事件。

相关文章:
  • 没有找到相关文章