B. *_*non 8 c# exception-handling xml-parsing windows-phone-8 windows-store-apps
这段代码在我的WP8应用程序中工作正常:
void App_UnhandledException(object sender, UnhandledExceptionEventArgs args)
{
string appName;
string appVersion;
var xmlReaderSettings = new XmlReaderSettings
{
XmlResolver = new XmlXapResolver()
};
using (var xmlReader = XmlReader.Create("WMAppManifest.xml", xmlReaderSettings))
{
xmlReader.ReadToDescendant("App");
appName = xmlReader.GetAttribute("Title");
appVersion = xmlReader.GetAttribute("Version");
}
WAMS_EXCEPTIONLOG wamsel = new WAMS_EXCEPTIONLOG
{
appNameAndVersion =
string.Format("{0} {1}", appName,
appVersion),
ExceptionMsg =
args.ExceptionObject.Message,
InnerException =
args.ExceptionObject
.InnerException.ToString(),
ExceptionToStr =
args.ExceptionObject.ToString(),
dateTimeOffsetStamp =
DateTimeOffset.UtcNow
};
await MobileService.GetTable<TASLS_WAMS_EXCEPTIONLOG>().InsertAsync(wamsel);
}
Run Code Online (Sandbox Code Playgroud)
...但在我的补充Windows商店应用程序中,几个类和类成员无法识别,即:
XmlResolver
XmlXapResolver
args.ExceptionObject
Run Code Online (Sandbox Code Playgroud)
(更不用说不允许等待的事实,并且向事件处理程序添加"async"会导致事件处理程序的赋值变为"变为红色")...
那么,回到主要观点:我如何通过我的Windows Store应用程序获得与WP8应用程序相同的功能?
Dam*_*Arh 17
让我先解决你的问题:
args.Exception
.async void
方法签名来调用事件处理程序中的异步方法,但是您必须记住,该方法将以"fire and forget"模式调用,即应用程序不会等待异步方法完成.如果你设置args.Handled = true
并因此阻止应用程序关闭,应该不是问题.您的固定事件处理程序应如下所示:
private async void App_UnhandledException(object sender, UnhandledExceptionEventArgs args)
{
string appName = Package.Current.Id.Name;
var version = Package.Current.Id.Version;
string appVersion = String.Format("{0}.{1}.{2}.{3}",
version.Major, version.Minor, version.Build, version.Revision);
WAMS_EXCEPTIONLOG wamsel = new WAMS_EXCEPTIONLOG
{
appNameAndVersion = string.Format("{0} {1}", appName, appVersion),
ExceptionMsg = args.Exception.Message,
InnerException = args.Exception.InnerException.ToString(),
ExceptionToStr = args.Exception.ToString(),
dateTimeOffsetStamp = DateTimeOffset.UtcNow
};
args.Handled = true;
await MobileService.GetTable<TASLS_WAMS_EXCEPTIONLOG>().InsertAsync(wamsel);
}
Run Code Online (Sandbox Code Playgroud)
args.Exception.InnerException
在调用ToString()
它之前,您还应该检查是否为null .