更改WP8 textBlock时“无效的跨线程访问”

时间:2014-03-06 08:43:10

标签: vb.net user-interface windows-phone-8 visual-studio-2013

我来自VB 6,并且是VB.NET的半新手。 我正在写一个Windows Phone 8应用程序。有一个网格,我有几个textBlocks,我想动态显示文件流(包含扫描数据)的数据。

当WP8页面打开时,它会自动将数据加载到textBlocks中。这有效。在我从文件加载数据之前,我想“重置”所有textBlock并隐藏它们。为此,我想使用一个基本上为每个textBlock执行以下操作的过程:

tbl1.Text = ""
tbl1.Visibility = System.Windows.Visibility.Collapsed

这恰好适用一次:页面加载时。该过程不会产生错误。

现在当我稍后再次调用该方法时,当我想刷新页面上显示的数据时,我在上面显示的第一行代码中出现以下错误:

System.Windows.ni.dll中发生了'System.UnauthorizedAccessException'类型的异常,但未在用户代码中处理 其他信息:无效的跨线程访问。

我现在有点迷失了。在VB6中,我能够用我的UI元素做任何我想做的事情。我认为我在这里犯了一些新手的错误?

我在某处读到了一些Dispatcher的事情。但是,简单地将textBlock中的值更改为我似乎过于复杂。有没有简单的方法?

2 个答案:

答案 0 :(得分:3)

解决方案确实是使用Dispatcher.BeginInvoke方法。

Dispatcher.BeginInvoke(() =>
{
    tbl1.Text = ""
    tbl1.Visibility = System.Windows.Visibility.Collapsed
});

您需要这个的原因是因为您尝试从非UI线程访问依赖于UI线程的对象。

答案 1 :(得分:1)

可能是因为您没有从UI线程调用该方法。尝试使用Dispatcher.BeginInvoke:

Dispatcher.BeginInvoke(()=>
    {
        tbl1.Text = "";
        tbl1.Visibility = System.Windows.Visibility.Collapsed;
    });