내가 원하는 것은 사용자가 웹 서비스가 처리 중임을 알고 작업을 시도하는 동안 반복적으로 단추를 매시지 않도록하기 위해서입니다.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가 표시되지 않습니다. 웹 서비스가 결과를 반환 한 후에 progressdialog 만 보았고 아무 곳에 나 숨겨 두지 않았기 때문에 계속 남아 있습니다. 앱이 partValidate를 기다리는 동안 어떻게 보이게 할 수 있습니까? 언제 숨길 수 있습니까?
트릭을 수행하는 것 같습니다. 감사!! 내 webmethod가 비동기적인 것이 더 낫지 않습니까? 아니면 이것이 더 효율적입니까? – jmease
나는 그것이 효율성보다 하나의 방법에 가장 적합한 방법이 더 중요하다는 것을 말하고 싶다. 웹 호출을 비동기로 만드는 것은 코드 정리에 유용 할 수 있지만 그 방법의 클라이언트는 비동기 적으로 작업해야합니다. 개인적으로, 이와 같은 경우에 비동기 적으로 호출하기를 좋아하고 결과를 처리하기위한 메서드에 대리자를 전달하는 것이 좋습니다. –