2015-02-25 4 views
1

Быстрая версия моей проблемы заключается в том, что WPF не принимает переменные из другого потока.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); 
} 

ответ

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)); 
} 
+0

Вот хороший ресурс, который поможет понять, что, черт возьми, Диспетчер. [link] (https://msdn.microsoft.com/en-us/magazine/cc163328.aspx) –

+0

@MikeEason Эта статья слишком стар. Если вы используете .NET 4.5>. Лучше использовать 'async/await' с TPL, чем' BackgroundWorkers'. И используйте 'Rx' для лучшего отзывчивого приложения –

+0

Спасибо, это сработало! – Danahi

 Смежные вопросы

  • Нет связанных вопросов^_^