【问题标题】:System.UnauthorizedAccessException: Invalid cross-thread access while updating ListPicker in WP8System.UnauthorizedAccessException:在 WP8 中更新 ListPicker 时跨线程访问无效
【发布时间】:2013-02-26 22:03:16
【问题描述】:

我正在构建简单的 WP8 应用程序。我正在尝试使用作为另一个类成员的集合来更新ListPicker 控件。此类通过异步调用获取此数据。当收到响应触发 MainPage 上更新 ListPicker 的事件时。

    public void coinUtil_ReceivedPriceEvent(object sender, EventArgs e)
    {
        PopulateListPicker();
    }

    public void PopulateListPicker()
    {

        try
        {
            foreach (KeyValuePair<string, double> item in coinUtil.cointPriceList)
            {

                listPickerCurrencies.Items.Add(item.Key);
            }
        }
        catch (UnauthorizedAccessException ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.ToString());
        }

    }

我收到以下异常:

“System.UnauthorizedAccessException”类型的第一次机会异常 发生在 System.Windows.ni.dll 中

“System.UnauthorizedAccessException”类型的异常发生在 System.Windows.ni.dll 并且在托管/本机之前未处理 边界 System.UnauthorizedAccessException:无效的跨线程 使用权。在 MS.Internal.XcpImports.CheckThread() 在 System.Windows.DependencyObject.GetValueInternal(DependencyProperty dp) 在 System.Windows.FrameworkElement.GetValueInternal(DependencyProperty dp) 在 System.Windows.Controls.ItemsControl.get_Items() 在 BitCoinTail.MainPage.PopulateListPicker()

奇怪的是,当我尝试用一​​个简单的字符串访问这个类的另一个成员时,它工作正常。我在 WP7 中进行了一些开发,但不记得曾经遇到过这个异常。谁能看到我做错了什么?

【问题讨论】:

  • 我认为您需要使用 Dispatcher 来确保 UI 在 UI 线程上更新。

标签: c# windows-phone-8


【解决方案1】:

您需要使用调度程序来编组对正确线程的调用 - 请参阅 http://www.codeproject.com/Articles/368983/Invoking-through-the-Dispatcher-on-Windows-Phone-a

【讨论】:

  • 我在谷歌搜索时遇到了这样的解决方案,但我不明白这是从哪里来的。我怎么可能访问 String 但无法访问 List 对象?
  • 我想这取决于它是否会导致 UI 更新......虽然不是 100% 确定
  • 好吧,但不是直接的。事实上SomeClass 中的列表填充了MainPage 上的值触发事件处理程序。我将尝试实现 Dispatcher,看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
相关资源
最近更新 更多