在facebook windows手机应用程序中未处理System.ObjectDisposedException
本文关键字:未处理 System ObjectDisposedException 应用程序 facebook windows 手机 | 更新日期: 2023-09-27 18:19:53
这一行出现错误:"无法访问已处理的对象"。
db._fbcontacts.InsertOnSubmit(new FacebookContactsList { Name = FBName });
有什么原因呢?
有一种方法,我想在本地数据库中写下来自facebook的用户帐户名称
public void LoadUserInfo()
{
using (FacebookDataContext db = new FacebookDataContext(DBConnectionstring))
{
FacebookClient fb = new FacebookClient(App.AccessToken);
fb.GetCompleted += (o, e) =>
{
var result = (IDictionary<string, object>)e.GetResultData();
var FBName = String.Format("{0} {1}", (string)result["first_name"], (string)result["last_name"]);
db._fbcontacts.InsertOnSubmit(new FacebookContactsList { Name = FBName });
db.SubmitChanges();
};
fb.GetTaskAsync("me");
}
}
您的回调方法在FacebookDataContext
被释放后被调用。
这是立即执行的代码
using (FacebookDataContext db = new FacebookDataContext(DBConnectionstring))
{
FacebookClient fb = new FacebookClient(App.AccessToken);
// no callback method is being executed here!
fb.GetTaskAsync("me");
}
然后,稍后当GetTaskAsync
完成时,执行以下操作:
var result = (IDictionary<string, object>)e.GetResultData();
/*blah blah snip*/
db._fbcontacts.InsertOnSubmit(new FacebookContactsList { Name = FBName });
db.SubmitChanges();
但是,您可以从第一个代码块中看到,在退出using
语句的作用域时,db已经被释放。
相反,您需要将数据库从using块中拉出并手动处理它。。。
public void LoadUserInfo()
{
FacebookDataContext db = new FacebookDataContext(DBConnectionstring);
FacebookClient fb = new FacebookClient(App.AccessToken);
fb.GetCompleted += (o, e) =>
{
try
{
/*blah fricken blah snipped */
db.SubmitChanges();
}finally{
if(db != null) db.Dispose();
}
};
fb.GetTaskAsync("me");
}
或者,您可以在事件处理程序中提取上下文的实例化。
public void LoadUserInfo()
{
FacebookClient fb = new FacebookClient(App.AccessToken);
fb.GetCompleted += (o, e) =>
{
/*yadda mfing blah */
using (FacebookDataContext db = new FacebookDataContext(DBConnectionstring))
{
db._fbcontacts.InsertOnSubmit(new FacebookContactsList { Name = FBName });
db.SubmitChanges();
}
};
fb.GetTaskAsync("me");
}