2016-09-14 5 views
0

Ich habe ein Gerät mit einem integrierten Bixolon-Drucker in ihm. Ich möchte eine App zum Drucken auf dem Drucker erstellen. Meine OnCreate Methode sieht wie folgt:Handler feuert zu früh

protected override void OnCreate(Bundle bundle){ 
base.OnCreate(bundle); 
SetContentView(Resource.Layout.Main); 

printer = new BixolonPrinter(this, new MyHandler(), Looper.MainLooper); 
printer.FindUsbPrinters();  

//button connect 
Button button = FindViewById<Button>(Resource.Id.buttonConnect); 
button.Click += delegate {  
    printer.ConnectUsb();//in the brackets I would need the value of the Handler back once it is available 
}; } 

Mein Handler ist wie folgt:

private class MyHandler : Handler 
    { 
     public override void HandleMessage(Message msg) 
     {    
      switch (msg.What) 
      { 
       case BixolonPrinter.MessageUsbDeviceSet: 
        Console.WriteLine("U S B  device::: " + msg.Obj); 
        //can not return the msg.Obj back to the button event 
        break; 
      }   
     } 
    } 

Das Problem ist das, wenn die Instanz des BixolonPrinter erstellt er sofort den Handler ausgelöst. Es gibt keine Möglichkeit, das Ergebnis des Handlers zum Button-Ereignis zurückzubringen. Um das Problem ein wenig komplizierter zu machen, ist der BixolonPrinter eine Java-JAR-Datei. Wie kann ich das Ergebnis zurück auf die Ereignisschaltfläche bekommen?

Antwort

0

Wenn Sie MainLooper verwenden, wird alles auf dem Hauptthread ausgeführt. Erstellen Sie stattdessen HandlerThread für die Interaktion. Um die Ausführung zu verschieben, verwenden Sie die Handler.postDelayed() -Methode, oder, was besser ist, verwenden Sie die RxJava-Bibliothek

Verwandte Themen