WPF从不同的类中检索跳跃信息

时间:2015-02-25 15:55:38

标签: c# wpf multithreading leap-motion

我的问题的快速版本是WPF不接受来自不同线程的变量。

error message: 
An unhandled exception of type 'System.InvalidOperationException' occurred in WindowsBase.dll

附加信息:调用线程无法访问此对象,因为另一个线程拥有它。

因为我订阅了跳帧事件,所以我找不到第二个线程的解决方法。以下代码中是否有某种方法可以将帧信息放在文本框中?

// MainWindow
LeapReader reader = new LeapReader();
public MainWindow()
{
    reader.Frame += reader_Frame;
}

void reader_Frame(string coordinate)
{
    //textbox which will output coordinates of the hand
    txtCoord.Text = coord;
}


// LeapReader
string _coordinates = "";
public delegate void StringEvent(string coord);
public event StringEvent Frame;

void SomeRetrievalMethod(Frame frame)
{
    _coordinates = Cursor.Position.ToString();
    Frame.Invoke(_coordinates);
}

1 个答案:

答案 0 :(得分:2)

将其发回TextBox's Dispatcher。如果你只是使用绑定并让WPF为你处理线程之间的调度会更好。

void reader_Frame(string coordinate)
{
    //textbox which will output coordinates of the hand
    txtCoord.Dispatcher.Invoke(new Action(() => txtCoord.Text = coord));
}