После некоторого поиска в обработке исключений в Silverlight и чтения некоторых полезных блогов, подобных этому Silverlight exception handling using WCF RIA Services and WCF Services В результате я создал аналогичную идею в App.xaml.cs, чтобы показать страницу с ошибкой и вызвать другой метод службы WCF, чтобы зарегистрировать ошибку в окне просмотра событий:Как остановить работу wcf-сервисов в Silverlight при возникновении исключения
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
if (!System.Diagnostics.Debugger.IsAttached)
{
var errorPage = new Error();
errorPage.Show();
string errorMsg = string.Format("{0} {1}", e.ExceptionObject.Message, e.ExceptionObject.StackTrace);
EventHandler<WriteIntoEventLogCompletedEventArgs> callback = (s, ev) =>
{
bool result = ev.Result;
};
(new ServiceProxy<ApplicationServiceClient>()).CallService<WriteIntoEventLogCompletedEventArgs>(callback, errorMsg);
e.Handled = true;
}
}
и это то, что я имею в Error.xaml.cs:
private void OKButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
, что в основном будет закрывать страницу ошибки когда пользователь нажимает OK.
Все работает отлично в большинстве случаев. Проблема возникает, когда один из обратных вызовов службы wcf вызывает исключение. Страница ошибки будет отображаться красиво, и когда пользователь нажимает кнопку ОК, страница с ошибкой закрывается. Но фон по-прежнему показывает индикатор занятости, а исходный обратный вызов службы все еще ждет ответа. Мне нужно как-то его прекратить.
Я был бы appriciative, если бы кто-нибудь мог помочь.
Спасибо, Sil
-
Большое спасибо за ваш полезный reply.I использовал ту же самую идею и в методе обратного вызова оригинального сервиса добавлен код для проверки e.Error и если это не null, закройте окно (это дочернее окно) с занятым указателем, и теперь все работает отлично. Еще раз спасибо. Sil