Так как обработчик события вызывается в том потоке, в котором было вызвано событие, у Вас получается ситуация, что Вы пытаетесь получить доступ к элементу управления из другого потока (отличного от UI) - а делать этого нельзя.
Для того что бы это "обойти" есть несколько вариантов, приведу некоторые из них:
1 Вариант
Можно воспользоваться SynchronizationContext
1) Получаем SynchronizationContext, важно получить его именно для UI поэтому где-нибудь в CodeBehind формы пишем:
_context = SynchronizationContext.Current;
2) Далее в Вашем обработчике события, который срабатывает при NewData(this, e); необходимо использовать полученный контекст синхронизации, для того что бы безопасно доступиться к UI элементу
_context?.Post(s =>
{
// Здесь пишите код, который получает доступ к контролу
}, null);
2 Вариант
В обработчике события, который срабатывает при NewData(this, e); можно обратиться к вашему элементу управления и вызвать метод Invoke в случае WinForms
myControl.Invoke(myDelegate);
либо использовать Dispatcher.BeginInvoke в случае WPF
Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(ThreadStart)delegate()
{
// Здесь пишите код, который получает доступ к контролу
}