我想要做的就是确保用户知道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(),那么我从来没有看到进度对话框。如果我拿出来,我只能看到webservice返回结果后进度对话框,然后保持原状,因为我没有将它隐藏在任何地方。如何在应用程序等待partValidate时显示它,以及何时可以隐藏它?
似乎要做的伎俩。谢谢!!尽管我的webmethod是异步的,还是这样或者更高效? – jmease 2011-12-28 22:17:02
我想说,更关键的是哪种方法最适合你在做什么,而不是效率。使Web调用异步可以清理代码,但这意味着该方法的任何客户端都需要异步工作。就个人而言,对于这种情况,我喜欢异步调用,并将委托传递给处理结果的方法。 – 2011-12-28 22:23:10