Niice. Where I am I do not have any sub channels or HD Data avaliable so I kind of stubbed in parts of it and planned to finish it while visiting my parents at some point but never did. I started merging in your changes along with some that I have had outstanding. Is there a reason why you are keeping the sub channels in a list of their own outside of the full station list? I am just not at glance seeing why you have to keep it all separate in the subChanMediaInfo. Good call on the locks. This was my first plugin and I didn't quite grasp the amount of threading an multizone that was going on. It has expanded since .7 too.
Oh I guess you are just storing all the sub channel's data of the current channel since it is all being sent all the time. Is it really slow to be received where that really seems to be needed?
EX: Can't we shrink it down to just
Private Sub m_Radio_HDRadioEventHDArtist(ByVal Message As String) Handles m_Radio.HDRadioEventHDArtist
If Message.StartsWith(m_Radio.CurrentHDSubChannel & "|") Then
Dim Artist As String = Message.Substring(2)
If Not m_CurrentMedia.Artist = Artist Then
m_CurrentMedia.Artist = Artist