public void Subscribe(CloverTransportObserver observer)
 {
     CloverTransport me = this;
     if (ready)
     {
         BackgroundWorker bw = new BackgroundWorker();
         // what to do in the background thread
         bw.DoWork += new DoWorkEventHandler(
         delegate (object o, DoWorkEventArgs args)
         {
             BackgroundWorker b = o as BackgroundWorker;
             observer.onDeviceReady(me);
         });
         bw.RunWorkerAsync();
     }
     observers.Add(observer);
 }