La risposta di Stuart qui è corretta, ma volevo solo espanderci un po 'perché sembra che ci sia ancora un po' di confusione e questo è un concetto importante per la progettazione di applicazioni.
Quando si ha a che fare con elementi dell'interfaccia utente, come rispondere all'input dell'utente o chiedere informazioni, non si desidera bloccare l'interfaccia utente. Pertanto, in situazioni come queste è necessario progettare il codice in modo da consentirne l'esecuzione in modo asincrono. Come hai notato, nel caso del tuo esempio di codice la funzione ritorna subito poiché non aspetterà che il callback venga eseguito. Se lo avesse fatto, il thread dell'interfaccia utente sarebbe stato bloccato e la tua applicazione sarebbe stata bloccata, il che non è quasi certamente quello che desideri.
Poiché non ho alcun contesto per questa chiamata di funzione, farò un semplice esempio. Diciamo che volevi ottenere il valore di ritorno della funzione e scriverlo nel log. Utilizzando l'approccio sincrono che hai fornito, che sarebbe simile a questa:
bool returnValue = test();
Console.WriteLine(returnValue);
Invece, quello che vorrei suggerire facendo è la ristrutturazione del metodo test()
in modo tale che si comporta in modo asincrono. Vorrei riscrivere a cercare qualcosa di simile:
public void test(Action<bool> callback)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.SetTitle(Android.Resource.String.DialogAlertTitle);
builder.SetIcon(Android.Resource.Drawable.IcDialogAlert);
builder.SetMessage("message");
builder.SetPositiveButton("OK", (sender, e) =>
{
callback(true);
});
builder.SetNegativeButton("NO", (sender, e) =>
{
callback(false);
});
builder.Show();
}
Questa versione è molto simile al tuo, solo che invece di restituire il valore direttamente dalla chiamata al metodo, esso viene rispedito tramite il parametro callback del metodo. Il codice di scrivere nel registro può quindi essere aggiornato a questo:
test(returnValue =>
{
Console.WriteLine(returnValue);
});
Ho un blog post up here che parla anche di diversi modi per farlo lavorare in thread in background e visualizzare i risultati nell'interfaccia utente, se questo vale per la tua situazione Spero che questo aiuti a chiarire le cose!
Controllare questo: http://stackoverflow.com/questions/4381296/android-wait-on-user-input-from-dialog – Ponmalar
non posso usarlo – mcxxx
non riuscivo a capire la tua risposta ... Non hai visto il link o altro? – Ponmalar