Instead of passing a reference to the class, consider using the "ref" keyword in the signature of the methods that modify the "sharedResultQueue". More info
https://msdn.microsoft.com/en-us/library/14akc2c7.aspx[
^]
Each class that needs to modify the results queue should have a method with a signature similar to :
void addResultsTo(ref Queue<...> sharedResultQueue)
{
}
A best practice would be to create a interface that contains this methods signature, which will be implemented by all classes that need to modify the "sharedResultQueue".
Update: Also, you should understand the SOLID principles, particularly the Liskov substitution principle & the Dependency inversion principle, before deciding on your design.