You can't really do that, not without complicating things far beyond sensible levels: the generic Dial class shouldn't know that any form related (or other user interface detail) classes even exist, much less what they contain.
Instead, your Dial class should create an event which the form handles, and the form then adds the data to it's collection.
Sounds complicated, I know - but it really isn't!
See here:
Transferring information between two forms, Part 2: Child to Parent[
^] - Dial is the child, the Form is the parent.
"@OriginalGriff, the thing is that the generic Dial class is used in TPL(task parallel library), say multiple Dials in an ActionBlock. I handle the parallelism from the MainWindow. In another word, I may need this collection from the parent form."
And when you signal the event, the form class gets the instance of the Dial class that raised it as the sender parameter as usual:
void child_DataAvailable(object sender, EventArgs e)
{
Dial dial = sender as Dial;
if (dial != null)
{
activeChannels.Add(dial.m_ChannelResource);
}
}