私がやりたいことは、Webサービスが処理中であることを知っていることを確認して、動作しようとしている間に繰り返しボタンをマッシュしないようにすることです。MonoDroid ProgressDialog
EditText partnumber = (EditText)FindViewById(Resource.Id.itemNumber);
partnumber.FocusChange += (object sender, View.FocusChangeEventArgs e) =>
{
if (!e.HasFocus)
{
var pd = ProgressDialog.Show(this, "Processing", "Please Wait...", false);
var res = new InventoryApp();
res.partValidateCompleted += delegate { pd.Hide(); };
var isValid = res.partValidate(partnumber.Text);
if (isValid == "Not Found")
{
partnumber.Text = "";
partnumber.RequestFocus();
partqty.ClearFocus();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.SetTitle("Invalid Part");
builder.SetMessage("Part number does not exist in database. Please ensure you are entering the correct part number and try again");
builder.SetPositiveButton("OK", delegate { });
var dialog = builder.Create();
dialog.Show();
}
else
{
partdesc.Text = isValid;
}
}
};
コードにpd.Hide()を残しても、progressdialogは表示されません。私がそれを取り出すと、ウェブサービスが結果を返した後で進捗状況ダイアグラムが表示され、どこにでも隠していないので、そのままになります。アプリケーションがpartValidateを待っている間にどのように表示させるのですか?そしていつ隠すことができますか?
トリックをするようです。ありがとう!!私のwebmethodが非同期である方が良いでしょうか、それともこれは効率的ですか? – jmease
私は、どちらの方法が効率の1つではなく、あなたがやっていることに対して最も理にかなっているかどうかという問題があると思います。 Web呼び出しを非同期にすることは、コードをクリーンアップする上では間違いありませんが、そのメソッドのクライアントは非同期でも動作する必要があります。個人的には、このような場合、私は非同期に呼び出しを行い、結果を処理するためのメソッドにデリゲートを渡すのが好きです。 –