我来自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中的值更改为我似乎过于复杂。有没有简单的方法?
答案 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;
});