Проблема в том, что библиотека вызывает OnDeviceFound
в потоке без пользовательского интерфейса. Если вы хотите манипулировать пользовательским интерфейсом при возникновении события, вы должны перенаправить его в поток пользовательского интерфейса:
private void btnAddMore_Click(object sender, RoutedEventArgs e) {
Button newBtn = new Button {Content = "A New Button"};
splMain.Children.Add(newBtn); // button is added
_yee.discover((o, args) => {
BeginInvoke((Action)(() => {
Button newBtn2 = new Button {Content = args.Device.Hostname.ToString()};
splMain.Children.Add(newBtn2); // NO button is added
}));
});
}
Кроме того, вы должны позаботиться о том, чтобы обработчик событий никогда не вызывал исключение; вы можете не знать, как код, вызывающий событие, справится с ним.