다음이 문제는 현재 답이있다 : 당신이 비동기 동안 예외를 처리하는 방법에 대한 제안을 위해, 그러나 crash reporting in MonoTouch and MonoDroid
참조 전화를 걸면 BestSeller 예제를 살펴보십시오. MvvmCross BestSellers Sample
BestSellers는 MvvmCross 응용 프로그램에서 상당히 많이 사용했던 두 가지 기술을 사용합니다.
- UIAlertViews, 토스트 및/또는 메시지 상자와 같은 UI 알림에 ViewModels에서 오류를 얻을 수있는 응용 프로그램 수준 "오류 라우터"의 사용을 오류 처리와 같은 공유 뷰 모델 코드에 대한 BaseViewModel 클래스의 사용. 보다 상세한 수준에서
, 무엇 베스트 셀러가하는 것은 :
는
각 뷰 모델은 책 정보에 대한 웹 서비스에 직접 전화를 사용합니다.
public CategoryListViewModel()
{
AsyncLoad();
}
private void AsyncLoad()
{
GeneralAsyncLoad(URL_CATEGORIES, ProcessResult);
}
GeneralAsyncLoad가 공유 BaseViewModel 정의된다 : 예를 들어 Category List가 구성된다
protected void GeneralAsyncLoad(string url, Action<Stream> responseStreamHandler)
{
try
{
IsLoading = true;
var request = WebRequest.Create(url);
request.BeginGetResponse((result) => GeneralProcessResponse(request, result, responseStreamHandler), null);
}
catch (ThreadAbortException)
{
throw;
}
// obviously we could do better than catching all `Exception` here!
catch (Exception exception)
{
IsLoading = false;
ReportError("Sorry - problem seen " + exception.Message);
}
}
상기 예외 핸들러 내 ReportError 방법은 삽입 된 개체 사용 - IErrorReporter
있다. 이 주입 객체는 응용 프로그램의 건설 기간 동안 싱글로 초기화됩니다
- 자신의 건설 및 설치하는 동안
App.cs
에 ErrorApplicationObject
를 참조 UI 프로젝트는 모두 같은 싱글에서 이벤트에 가입 - 대신 또는 IErrorReporter
IErrorSource
인터페이스를 사용하여 .
이렇게하면 각 플랫폼에서 자체 오류 디스플레이를 표시 할 수 있습니다 (예 :: 당신이 오류를 필요로하는 경우
내 코드에서 메시지 박스를 보여줍니다 오류 표시뿐만 아니라 처리 - eg 비동기 작업을 다시 시도하거나 오프라인 데이터 복사본을로드하려는 경우 ViewModel 및 BaseViewModel 내에서 오류 처리에이 작업을 추가 할 수 있습니다.
고마워, 내가 찾고 있었던 것이었다! –