我在项目中使用Async CTP库时遇到问题。 这是代码:
BookPage
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (this.DataContext is BookViewModel)
{
var bookViewModel = this.DataContext as BookViewModel;
bookViewModel.UpdateReviews();
}
}
BookViewModel
public async void UpdateReviews()
{
Reviews.Clear();
IEnumerable<Review> newReviews = null;
try
{
newReviews = await BooksManager.GetBookReviews(this.Book.Sysno, 10, 0);
}
catch (Exception ex)
{
}
if (newReviews != null)
{
foreach (var review in newReviews)
{
Reviews.Add(review);
}
}
}
BooksManager
public static async Task<IEnumerable<Review>> GetBookReviews(string sysno, uint limit, uint offset)
{
if (sysno == null)
throw new ArgumentNullException("sysno");
if (string.IsNullOrWhiteSpace(sysno))
throw new ArgumentException("sysno");
string url = CreateBookReviewsURL(sysno, limit, offset);
var reviews = await DownloadDataAsync<IEnumerable<Review>>(url);
return reviews;
}
public static async Task<T> DownloadDataAsync<T>(string url)
{
if (url == null)
throw new ArgumentNullException("url");
var newUrl = url.Contains("?") ?
string.Format("{0}d={1}", url, DateTime.Now) :
string.Format("{0}?d={1}", url, DateTime.Now); //to avoid caching
string data = null;
WebRequest webRequest = WebRequest.CreateHttp(newUrl);
using (WebResponse response = await webRequest.GetResponseAsync())
{
if (response.Headers["StatusCode"] == "200")
{
using (var stm = response.GetResponseStream())
{
using (var reader = new StreamReader(stm))
{
data = await reader.ReadToEndAsync();
}
}
}
}
var books = await ParseDataAsync<T>(data);
return books;
}
抛出NullReferenceException
在 SmartLib.ViewModels.BooksViewModel.d_ 8.MoveNext()
在 System.Runtime.CompilerServices.TaskAwaiter&LT;。&以及c _DisplayClass5.b__1(对象 国家) System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi,Object obj,BindingFlags invokeAttr,Binder binder,Object 参数,CultureInfo文化,布尔isBinderDefault,汇编 调用者,布尔验证访问,StackCrawlMark&amp; stackMark)at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr,Binder binder,Object []参数, CultureInfo culture,StackCrawlMark&amp; stackMark)at System.Reflection.MethodBase.Invoke(Object obj,Object []参数)
在System.Delegate.DynamicInvokeOne(Object [] args)at System.MulticastDelegate.DynamicInvokeImpl(Object [] args)at System.Delegate.DynamicInvoke(Object [] args)at System.Windows.Threading.DispatcherOperation.Invoke()at System.Windows.Threading.Dispatcher.Dispatch(的DispatcherPriority System.Windows.Threading.Dispatcher.OnInvoke(Object。的优先级) System.Windows.Hosting.CallbackCookie.Invoke(Object []上下文) args)at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object [] args)
在System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle,Int32 nParamCount,ScriptParam [] pParams,ScriptParam&amp; pResult)
在App.xaml.cs中调用BooksManager.GetBookReviews()可以正常工作。