Hej :)

Jestem w trakcie tworzenia dość dużego systemu, i nadszedł czas na refaktoryzację części kodu. Już tłumaczę o co chodzi , i w czym problem.
Sama logika działania aplikacji jest dość dobrze zaprojektowana ale, żeby poprawnie mogła ona działać musi potrafić komunikować się z zewnętrznym systemem. Na wstępie muszę dodać, że nie było możliwości skorzystania z popularnego WCFa :- )

Komunikacja, odbiór oraz nadawanie wiadomości są już oprogramowana więc tą część kodu można spokojnie użyć ponownie.

A teraz do sedna, i problemu : W tej chwili pobieranie, oraz kolejkowanie wiadomości odbywa się w komponencie timer’a który po wyznaczonym odstępie czasu, sprawdza czy są dostępne nowe wiadomości. Wszystko przedstawiono na uproszczonym przykładzie poniżej ( wyczyściłem locki, konstruktory, wszystko co mogłoby zaciemniać przykład ).

class MQueue
  {
    private readonly Queue<string> queue = new Queue<string>();
 
    public event EventHandler NewMassagesEvent;
 
    private Timer aTimer;
 
    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
		if ( System.IsNewMessage )
		{
			Enqueue(System.GetMessage());
			OnChanged();
		}
    }
 
    protected void OnChanged()
    {
      if (NewMassagesArrived != null)
        NewMassagesArrived(this, EventArgs.Empty);
    }
 
    public void Enqueue(string item)
    {
        queue.Enqueue(item);
    }
 
    public string Dequeue()
    {
      return queue.Dequeue();
    }
  }

Po otrzymaniu wiadomości, dodawana jest ona co prawda do kolejki ale event nowego polecenia jest rzucany w BARDZO brzydki sposób. W argumencie przesyłany jest cały obiekt klasy, po to, żeby listener mógł pobrać rozkaz za pomocą metody Dequeue. Dodatkowo w takim przypadku obsługa delegatów odbywa się w wątku timera, a nie w wątku głównym.
Może ktoś mnie nakierować ? W jaki sposób zrefaktoryzować w/w klasę aby działała jak trzeba ?
Dzięki za wszelką pomoc!