我的问题的快速版本是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);
}
答案 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));
}