我正在使用XAML所依赖的类:
<Window x:Class="TheWPFWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
我可以在构造函数中绘制任何内容。在该类中,我为来自MSMQ的消息进入时创建了一个处理程序:
AddHandler SomeQueue.PeekCompleted, AddressOf GetData
但是当消息通过时,我认为它与UI不同(有意义),我不能使用MSMQ消息信息在GetData()Sub中的WPF UI上绘制。
我尝试了一些Dispatcher()调用,但我得到的只是:
(at GetData) System.InvalidOperationException: The calling thread cannot access this object because a different thread owns it.
at System.Windows.Threading.DispatcherObject.VerifyAccess()
at System.Windows.Media.Media3D.ModelVisual3D.get_Children()
at TheWPFWindow.GetData() in C:\users\yumi\project\TheWPFWindow.xaml.vb:line 271
我知道如果我可以将对象添加到UI线程(它们在构造函数代码中工作),上述操作将起作用,但我无法弄清楚如何告诉UI线程,我甚至可能无法找到UI线程!
我知道Peek / PeekCompleted(有效)是异步的(在另一个线程上),但不应该有一种方法(在同一个类中)使用来自应用程序的图形/ UI中的传入消息线?
看起来很简单,但很难。
答案 0 :(得分:0)
您需要重新调用UI线程,如下所示:
Application.Current.Dispatcher.Invoke(() =>
{
// to do something here...
});
或在VB.Net中,我相信它会是这样的:
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, New Action(Function() Do ... End Function))